我需要能够使用r中的名称捕获正则表达式中的组。我测试了这个网站[Rd] Named capture in regexp中解释的代码,这个例子没有问题。我尝试调整此代码来解决简单的正则表达式。
(xxxx)(?<id>\w{4})(?<number>\d{5})
有关详细信息,请参阅代码here
我试着在r
中这样做regex = "(xxxx) (?<id>[0-9A-Za-z]{4}) (?<number>[0-9]{5})"
notable = "xxxxcn0700814"
regexpr(regex,notable,perl = TRUE)
这是我输出的代码
[1] -1
attr(,"match.length")
[1] -1
attr(,"useBytes")
[1] TRUE
attr(,"capture.start")
id number
[1,] -1 -1 -1
attr(,"capture.length")
id number
[1,] -1 -1 -1
attr(,"capture.names")
[1] "" "id" "number"
我可以看到这有什么问题,因为这段代码类似于网页代码。
提前致谢
答案 0 :(得分:2)
如果要在PCRE正则表达式格式中创建空白,只需使用(?x)
内联修饰符:
regex = "(?x)(xxxx) (?<id>[0-9A-Za-z]{4}) (?<number>[0-9]{5})"
^^^^
如果要将文字空间与此修饰符匹配,则必须将其转义,或在字符类中使用。如果您需要匹配任何空格,请使用\s
简写。
如果你不需要所有这些&#34;美化&#34;东西,只需从你的模式中删除空格,因为没有(?x)
它们是有意义的:
regex = "(xxxx)(?<id>[0-9A-Za-z]{4})(?<number>[0-9]{5})"
请注意,文字#
符号也必须转义为表示文字#
符号。
此外,字符类([...]
)中的空格被视为文字空格,您可以使用(?#:...)
修饰符在PCRE正则表达式模式中使用(?x)
注释。