1

我正在尝试使用正则表达式解析GEDCOM文件,并且快到了,但表达式会抓取文本的下一行,以获取行尾有可选文本的行。每条记录应该是一行。

这是文件的摘录:

0 HEAD
1 CHAR UTF-8
1 SOUR Ancestry.com Family Trees
2 VERS (2010.3)
2 NAME Ancestry.com Family Trees
2 CORP Ancestry.com
1 GEDC
2 VERS 5.5
2 FORM LINEAGE-LINKED
0 @P6@ INDI
1 BIRT

这是我正在使用的正则表达式:

(\d+)\s+(@\S+@)?\s*(\S+)\s+(.*)

这适用于所有行,除了末尾不包含任何文本的行,例如第一行。例如,第一条记录的最后一个捕获组包含“1 CHAR UTF-8”。

这是来自 regex101.com 的屏幕截图,显示了紫色捕获组如何渗入下一行:

正则表达式 101 屏幕截图

我尝试使用$限定符将其限制.*为仅行尾,但这失败了,因为第二行也是行尾。

4

1 回答 1

2

\s模式匹配换行符。将其替换为常规空格,或者[^\S\r\n],或者\h如果它是 PCRE,或者[\p{Zs}\t]

(\d+) +(@\S+@)? *(\S+) +(.*)

查看正则表达式演示

如果您需要匹配线,您可以添加一个多线选项并在两侧添加锚点(^在模式的开头和结尾)(参见另一个演示)。$

于 2017-02-13T11:16:45.973 回答