行尾的正则表达式
Regular expression for end of line
我正在尝试使用正则表达式解析一个 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 的屏幕截图,显示了紫色捕获组如何渗入下一行:
我曾尝试使用 $
限定符将 .*
限制为仅行尾,但由于第二行也是行尾而失败。
\s
模式匹配换行符。将其替换为常规 space,或 [^\S\r\n]
,或 \h
(如果是 PCRE),或 [\p{Zs}\t]
.
(\d+) +(@\S+@)? *(\S+) +(.*)
如果需要匹配行,可以添加多行选项,添加锚点(^
在开头,$
在结尾彭定康)两侧(见another demo)。
我正在尝试使用正则表达式解析一个 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 的屏幕截图,显示了紫色捕获组如何渗入下一行:
我曾尝试使用 $
限定符将 .*
限制为仅行尾,但由于第二行也是行尾而失败。
\s
模式匹配换行符。将其替换为常规 space,或 [^\S\r\n]
,或 \h
(如果是 PCRE),或 [\p{Zs}\t]
.
(\d+) +(@\S+@)? *(\S+) +(.*)
如果需要匹配行,可以添加多行选项,添加锚点(^
在开头,$
在结尾彭定康)两侧(见another demo)。