我想匹配出现在数字后面的任何字母。句子中不能有其他数字
# example 1 one letter
> 'word 1 b'
> array(b)
# example 2 multiple letters
>'3c, d, e'
> array (c, d, e)
# example 3 no match
>'word 5'
> array()
# example 4 multiple letters multiple digits
>'words 12a b c'
> array(a, b, c)
我已经尝试过[^d]+?([A-Za-z])
,但这也匹配数字之前的字母,而不是附加到数字上的字母(例如在示例4中,12a
或示例2中,3c
)
既然这对你有效,下面是可能的解决方案:
(?:G(?!^)|d+)[^a-z]*K[a-z]
(?<=d.*)[a-z]
参见regex #1 demo和regex #2 demo。细节:
(?:G(?!^)|d+)
-一个或多个数字或前一次成功匹配的结束[^a-z]*
-任何零个或多个非小写字母K
-匹配重置操作符丢弃到目前为止匹配的所有文本[a-z]
—小写字母。
第二个正则表达式的意思是:
(?<=d.*)
-一个位置,前面紧接一个数字,然后是除换行符以外的任何零或多个字符,尽可能多[a-z]
-小写字母。
要排除单词and
,可以使用
(?:G(?!^)(?:s+andb)?|d+)[^a-zn]*K[a-z]
查看这个正则表达式演示。或者,
(?<=d.*)[a-z](?<!bandb)(?!(?<=ban)db)(?!(?<=ba)ndb)
查看这个正则表达式演示。
听起来您可能需要的是一个零宽度组,该组是表达式所需的,但不是捕获的一部分。零宽度前视将使用它找到的任何数字,并且捕获的组将是数字之后的任何内容。
(?=d+)(w+)