使用regex将数据文件转换为xml

本文关键字:转换 xml 文件 数据 regex 使用 | 更新日期: 2023-09-27 17:57:33

我希望使用regex将文本数据文件转换为xml。

这是我将使用的一些示例数据:

^JOB DMR344JAL -C01 -Z"PRT16"
^PAGE 01
^GLOBAL PAGELBL
Pag.
^$PAGE 01
^GLOBAL CMPADDR
COMPANY
Somestreet 1
10000 Somecity
^GLOBAL TELEPHONELBL
Telephone
^GLOBAL TELEPHONE
0000 0/000.00.00
^GLOBAL TELEFAXLBL
Fax
^GLOBAL TELEFAX
0000 0/000.00.00
^GLOBAL ORGNOLBL
Orig.nr.
^GLOBAL ORGNO
^GLOBAL WEBSITE
http://www.internet.com
^GLOBAL EMAIL
e-mail account@internet.com
^GLOBAL SEAT1LBL
Maatschappelijke zetel
^GLOBAL SEAT2LBL
Someaddress
^GLOBAL HANDREG
RPR
^GLOBAL HANDREGNR
Somecity
^GLOBAL TITLE
^GLOBAL TITLE1
FACTUUR
^GLOBAL INVNOLBL

到目前为止,我得到的正则表达式如下:

'^((?:GLOBAL|FIELD)'s(?:[A-Z0-9]+))'r

替换正则表达式如下所示:

<$1>$2</$1>

这给了我以下结果:

^JOB DMR344JAL -C01 -Z"PRT16"
^PAGE 01
<GLOBAL PAGELBL>$2</GLOBAL PAGELBL>
Pag.
^$PAGE 01
<GLOBAL CMPADDR>$2</GLOBAL CMPADDR>
COMPANY
Somestreet 1
10000 Somecity
<GLOBAL TELEPHONELBL>$2</GLOBAL TELEPHONELBL>
Telephone
<GLOBAL TELEPHONE>$2</GLOBAL TELEPHONE>
0000 0/000.00.00
<GLOBAL TELEFAXLBL>$2</GLOBAL TELEFAXLBL>
Fax
<GLOBAL TELEFAX>$2</GLOBAL TELEFAX>
0000 0/000.00.00
<GLOBAL ORGNOLBL>$2</GLOBAL ORGNOLBL>
Orig.nr.
<GLOBAL ORGNO>$2</GLOBAL ORGNO>
<GLOBAL WEBSITE>$2</GLOBAL WEBSITE>
http://www.internet.com
<GLOBAL EMAIL>$2</GLOBAL EMAIL>
e-mail account@internet.com
<GLOBAL SEAT1LBL>$2</GLOBAL SEAT1LBL>
Maatschappelijke zetel
<GLOBAL SEAT2LBL>$2</GLOBAL SEAT2LBL>
Someaddress
<GLOBAL HANDREG>$2</GLOBAL HANDREG>
RPR
<GLOBAL HANDREGNR>$2</GLOBAL HANDREGNR>
Somecity
<GLOBAL TITLE>$2</GLOBAL TITLE>
<GLOBAL TITLE1>$2</GLOBAL TITLE1>
FACTUUR
^GLOBAL INVNOLBL

我究竟是如何获得$1之间的值的????

  • 每个字段都有^作为指示符
  • 字段后面的行将用于$2
  • 不要介意前两行和$PAGE 01。(在应用regex之前,我将拆分文件)

我已经为此伤透了脑筋一段时间了,如果能任何有更多regex经验的人都可以帮助我或为我指明正确的方向!

问候,

斯坦尼

使用regex将数据文件转换为xml

您需要转义正则表达式中的^以匹配^,因为它指示正则表达式中字符串的开头。

我认为所需的正则表达式是'^(GLOBAL|FIELD)'s([A-Z0-9]+),它与GLOBALFIELD匹配,后跟空白,后跟任意长度的大写字母或数字序列(至少一个)。用<$1>$2</$1> 替换匹配项

如果我说对了。。这就是你要找的

Regex:"''^(GLOBAL.*?)(?=['n'r]+)(.*?)(?=''^|$)"

为了更通用,您可以使用"''^(.*?)(?=['n'r]+)(.*?)(?=''^|$)"

替换:<$1><$2></$1>

单线选项

一起使用

我想我找到了答案:

((GLOBAL|FIELD)'s([A-Z0-9]+))(.+?)(?='^)'^

替换:

<$2_$3>$4</$2_$3>

这几乎正是我所需要的。

问候