利用正则表达式实现简单的文本键值对转xml

Posted by
内容纲要

前言

前两天我有类似下面这样的文本需要转成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:
image

<Property name="0411" value="大连"/>
<Property name="010" value="北京"/>

后记

这只是正则表达式替换的简单应用,也让我再一次领略到正则表达式的强大之处。通过更复杂的应用可以实现更多的文本转换功能。

One comment

Leave a Reply

您的电子邮箱地址不会被公开。