0

试图匹配所有这些:

{_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

我希望能够有任意数量的数字 in $2,并只保留单词 in $1。我需要提前看一下吗?

4

2 回答 2

3

在大多数正则表达式风格中,您可以使用不贪婪的重复,它消耗尽可能少(与默认值相反 - 尽可能多):

{_(\w+?)(\d+|X)}

但是,如果数字之前的部分永远不能包含数字和下划线(包含在 中\w),您可以简单地使用更具体的字符类:

{_([a-zA-Z]+)(\d+|X)}
于 2013-08-09T16:12:45.790 回答
1

尝试使用非贪婪匹配(添加?after \w+)尽可能少地消耗并且仍然匹配:

{_(\w+?)(\d+|X)}

或者如果您的语言(未指定)支持环视,那么:

{_(\w+)(?<=[a-zA-Z])(\d+|X)}

它断言第 1 组的最后一个字符必须是一个字母(尽管字母可能出现在第 1 组的其他地方)

于 2013-08-09T16:12:35.977 回答