设计正则表达式以提取子字符串的前两位数字:
因此,从"234b342d3"
开始,匹配结果应为:
23
(来自234b
)
2d
(来自2d
)
我的近似答案是"(?=1.*)[a-zA-Z]"
,但看起来不起作用。
我将非常感谢您的回复。
答案 0 :(得分:0)
我假设你的意思是(?=2.*)...
。
(?=2.*)
表示下一个字符为2
,后跟一个或多个字符。但是正则表达式说下一个字符必须是[a-zA-Z]
,所以没有任何东西可以匹配(因为一个字符不能同时是2
和[a-zA-Z]
。
只是删除前瞻(2.*[a-zA-Z]
)是朝着正确方向迈出的一步,但以下仍然是错误的:
.*
会贪婪地匹配,因此234b342d
而不只是234b
,而2d
将不匹配,因为它已经被前一个覆盖匹配)因此,将前两个字符放在括号中,将其放入一个组中,然后添加非贪婪匹配(.*?
而不是.*
)((2.).*?[a-zA-Z]
)。但现在:
所以我们需要添加后视来解释这个问题。
最后我们得到:
(2.)((?<=[a-zA-Z])|.*?[a-zA-Z])
然后提取第一组(如何做到这一点取决于语言)。
(2.)
确保以2开头并将前2个字符放在一个组中
(?<=[a-zA-Z])
在您的示例中为2d
帐户提供了支持(2
后跟一封信)
.*?
是非贪婪匹配的
[a-zA-Z]
- 表示以字符结尾