我是regex的新手,希望能得到一些指导/帮助。
目前,我正在编写一个表达式,它从提供的文本的第二行中派生出文本的某一部分。
以下是文本:
加拿大药房经理:个人药房许可证持有者/所有者: 123456 Manitoba R3E .
请参阅使用代码here正确设置格式
我的目标是从第二行派生' Manitoba‘字符串,但是我想让它成为动态的,而不是编写一个表达式来总是将Manitoba作为静态获取。我使用了下面的代码来定位第二行:
(.*)(?=(\n.*){3}$)
(它从最后一行开始匹配3行,从而定位到所需的行)
我注意到,在数据集中,省(马尼托巴省)总是在两个空格之间。
是否可以对代码做任何补充,使表达式只针对第二行,然后匹配空格之间的第一个字符串?
也许使用一个懒惰的表达式和一个积极的环视?
如果我以空格之间的所有匹配为目标,它将同时使用'Manitoba‘和'R3E 0L7’,这是我不想要的。
我希望它只匹配第二行空格之间的第一段文本。
非常感谢您的帮助:-)
谢谢。
发布于 2020-04-28 02:20:11
一种选择是匹配第一行,然后在捕获组1时捕获第二行中的第二个单词。
然后匹配第二行的其余部分,并断言后面的内容是一行的3倍。
^.*\r?\n\S+[^\S\r\n]+(\S+).*(?=(?:\r?\n.*){3}$)
在部件中:
^
string.*\r?\n
的开始匹配整个行和newline\S+
匹配非空白字符(第一个"word")[^\S\r\n]+
匹配1+非空格字符,除了newlines(\S+)
"word').*
line(?=
1+ 1 1+ 匹配1+乘以非空格字符(第二个“word‘).*
匹配line(?=
1+1+的其余部分,断言右边接下来的内容是(?:\r?\n.*){3}$
匹配3次换行符,然后是0+匹配除换行符以外的任何内容,并断言string的结尾
)
Close lookahead您也可以将先行查找转换为匹配
^.*\r?\n\S+[^\S\r\n]+(\S+).*(?:\r?\n.*){3}$
https://stackoverflow.com/questions/61464762
复制相似问题