我正在尝试以这种格式提取子字符串:
preceeding-string-data-i-want
其中:
preceeding-string
应该是stringA
或stringB
或stringC
之一。
我尝试使用:
(?:stringA|stringB|stringC)-?([A-Za-z\d]*)
但这会导致不正确的匹配。我无法弄清楚我哪里出错了。
- 编辑 -
匹配stringA-pine-9000
会将stringA-pine
和pine
作为匹配。
答案 0 :(得分:1)
如果您想匹配pine-9000
,您可能需要在第二组允许的字符集中加入-
:
(?:stringA|stringB|stringC)-?([A-Za-z\d-]*)
答案 1 :(得分:0)
这样的事情可以解决问题:
((stringA)|(stringB)|(stringC))-?([A-Za-z\d]*)
它将匹配:stringA-dataIWantfff
,stringBDataIWant
,stringC-DataIWant123
但不匹配stringD-DataIWant
,它将匹配除@
stringC-DataIWant@
以外的所有内容
我看到的问题是,在data-i-want
部分,您添加了破折号(-
),这些破折号未包含在原始正则表达式中。我假设`data-i-want-不包含破折号。如果是,那么你可以像这样添加它:
((stringA)|(stringB)|(stringC))-?([A-Za-z\d\-]*)
这将匹配某种类型:stringA-Data-I-Want
。