内容纲要
前言
前两天我有类似下面这样的文本需要转成xml格式。
源文本:
0411 大连
010 北京
xml格式:
<Property name="0411" value="大连"/>
<Property name="010" value="北京"/>
这样的数据有很多,自然一个个手动改又笨又麻烦。当时我就想在网上找个轮子或是自己造个轮子修改,后来转念一想“为啥不试试神奇的正则表达式呢?”。
查找正则
要想将源文本进行修改替换,首先需要对源文本进行匹配。通过翻阅菜鸟教程上的正则表达式语法,我写出了如下正则来匹配源文本:
[0-9]+s+[u4e00-u9fa5]+
替换正则
既然源文本匹配到了,现在的问题就是将源文本替换成xml的格式。在本例中就是在源文本的基础上加上下面的类似字符串:
<Property name="" value=""/>
那问题来了,源文本中的文字要用什么来代替呢?
通过搜索网络,我找到了一篇正则替换的教程,通过教程我知道了可以通过\1,\2的形式来指代查找正则里的文本,比如这个替换正则:
<Property name="\1" value="\2"/>
那么\1,\2指代的是什么呢?其实是查找正则里第一个和第二个小括号括起来的内容。为此我需要在查找正则里加上小括号:
注:在VS Code等编辑器中,是用$1,$2来指代括号里的内容
([0-9]+)\s+([\u4e00-\u9fa5]+)
然后在notepad++(也可以用别的工具)里输入源文本、查找正则和替换正则,点击全部替换即可生成想要的xml:
<Property name="0411" value="大连"/>
<Property name="010" value="北京"/>
后记
这只是正则表达式替换的简单应用,也让我再一次领略到正则表达式的强大之处。通过更复杂的应用可以实现更多的文本转换功能。
后来我才知道,这种替换用到的是正则表达式的反向引用。这个概念在那个菜鸟教程里也有提到。