我的问题与 lookbehinds 有关,我想找到“this”之后的所有第一个数字,我有以下数据:
188282这是一个数字12345和54321的例子 188282这是一个数字1234556的例子 这是一个数字1234556的例子 187293这是数字74893和83978的另一个例子
模式:
this is an example of a number \d+
输出
188282 this is an example of a number 12345
和54321
188282 this is an example of a number 1234556
this is an example of a number 1234556
187293这是数字74893和83978的另一个例子
为了匹配所有这些,我使用了更通用的方法,因为我知道我想要在“this”这个词之后的第一个数字
模式:
this[^\d]+\d+
输出
188282 this is an example of a number 12345
和54321
188282 this is an example of a number 1234556
this is an example of a number 1234556
187293 this is another example of a number 74893
和83978
现在我想使用lookbehinds,因为我不想在结果中包含部分模式。按照我的第一个方法:
模式:
(?<=this is an example of a number )\d+
输出
188282这是一个数字12345
和54321的例子
188282这是一个数字1234556
的例子
这是一个数字1234556
的示例
187293这是数字74893和83978的另一个例子
看起来我到了那里,我想像以前一样报道最后一个案例,所以我尝试了第二种方法。
模式:
(?<=this[^\d]+)\d+
输出
188282这是一个数字12345和54321的例子 188282这是一个数字1234556的例子 这是一个数字1234556的例子 187293这是数字74893和83978的另一个例子
与任何事物都不匹配 是否可以在lookbehinds内部设置图案?我是否尝试过这个问题的错误方法?这有点长,但我想告诉你到目前为止我尝试了什么,而不只是问问题
提前致谢
答案 0 :(得分:2)
是的,你可以在lookbehinds中使用模式,但是在大多数正则表达式中你不能做的就是拥有一个可变长度的lookbehind。换句话说,你不能在lookbehind中使用量词(但允许使用像{n}
这样的固定量词)。但是一些正则表达式允许您使用交替|
或有限(如java)量词{1,n}
。
使用.net语言,允许使用可变长度的lookbehind。
答案 1 :(得分:1)
具有lookbehinds的东西是并非所有语言都支持可变宽度的lookbehinds(它们不支持lookbehinds,其中的内部可以是可变数量的字符)。
你可以做的,可能是使用前瞻和捕获组:
(?=this[^\d]+(\d+))
或者重置匹配的\K
正则表达式字符(如果你的正则表达式引擎支持它)。
this[^\d]+\K\d+
答案 2 :(得分:0)
这取决于你的正则表达式的实现。你肯定要做一些测试。
我知道有些实现不喜欢这样:
(?<=\d{1,5})
或(?<=\w*)
但是他们可以正常工作:
(?<=\d{5})
或(?<=\w{1000})
换句话说,没有重复或灵活的长度。