尝试匹配所有这些:
{_someWord1} ... $1=someWord, $2=1
{_another82} ... $1=another, $2=82 (item in question)
{_testX} ... $1=test, $2=X
我的正则表达式:{_(\w+)(\d+|X)}
匹配所有三个,但第二个项目的组是:
{_another82} ... $1=another8, $2=2
我希望能够在$2
中包含任意数量的数字,并且只保留$1
中的字词。我需要提前看一下吗?
答案 0 :(得分:3)
在大多数正则表达式中,您可以使用ungreedy repetition,尽可能少地使用{{3}}(与默认值相反):
{_(\w+?)(\d+|X)}
但是,如果数字前面的部分永远不能包含数字和下划线(包含在\w
中),那么您可以简单地使用更具体的字符类:
{_([a-zA-Z]+)(\d+|X)}
答案 1 :(得分:1)
尝试使用非贪婪的匹配(在?
之后添加\w+
)以尽可能少地使用并仍然匹配:
{_(\w+?)(\d+|X)}
或者如果您的语言(未指定)支持环视,那么:
{_(\w+)(?<=[a-zA-Z])(\d+|X)}
断言第1组的最后一个字符必须是一个字母(尽管字母可能出现在第1组的其他地方)