设计一个正则表达式来提取子字符串的前两位数字:
- 以字母结尾
- 从 2 开始
所以 from "234b342d3"
,匹配结果应该是:
23
(from 234b
)
2d
(from 2d
)
我的大致答案是"(?=1.*)[a-zA-Z]"
,但看起来它不起作用。
我会感谢你的每一个回复。
设计一个正则表达式来提取子字符串的前两位数字:
所以 from "234b342d3"
,匹配结果应该是:
23
(from 234b
)
2d
(from 2d
)
我的大致答案是"(?=1.*)[a-zA-Z]"
,但看起来它不起作用。
我会感谢你的每一个回复。
我假设你的意思是(?=2.*)...
。
(?=2.*)
表示下一个字符2
后跟一个或多个任何内容。但是然后正则表达式说下一个字符必须是[a-zA-Z]
,所以什么都不会匹配(因为一个字符不能2
同时[a-zA-Z]
是。
仅删除前瞻 ( 2.*[a-zA-Z]
) 是朝着正确方向迈出的一步,但以下内容仍然是错误的:
.*
将贪婪匹配,所以234b342d
而不是只是234b
, 并且2d
不会匹配,因为它已经被上一个匹配覆盖了)因此,将前 2 个字符放在括号中以将其放在一个组中并添加非贪婪匹配(.*?
而不是.*
)((2.).*?[a-zA-Z]
)。但现在:
所以我们需要添加look-behind来解决这个问题。
所以最后我们得到:
(2.)((?<=[a-zA-Z])|.*?[a-zA-Z])
然后提取第一组(如何做到这一点取决于语言)。
(2.)
确保它以 2 开头并将前 2 个字符放在一个组中。在您的示例中
(?<=[a-zA-Z])
向后考虑(a后跟一个字母)是非贪婪匹配- 意味着以一个字符结尾2d
2
.*?
[a-zA-Z]