设计一个正则表达式来提取子字符串的前两位数字:
- 以字母结尾
- 从 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后跟一个字母)是非贪婪匹配- 意味着以一个字符结尾2d2
.*?
[a-zA-Z]