在单独的单词中拆分2个单词的字符串[但有时字符串中只有单词...]

Hen*_*enk 2 regex string split

我有像" AMS.I-I.D. ver.5"和" AM0011 ver. 2" 这样的字符串,其中" ver. *"需要被删除.我这样做了:(^A.*)(ver.\s\d{1,2})

没有像" AM0003" 这样的版本号时会出现问题.如何使(ver.\s\d{1,2})部件可选?

Mar*_*ers 6

添加问号时它无法正常工作的原因是因为您的第一组贪婪地匹配.尝试将其更改为非贪婪的匹配,然后使第二组可选:

^(A.*?)(ver\.\s\d{1,2})?$
     ^                 ^
 non-greedy        optional
Run Code Online (Sandbox Code Playgroud)

请注意,在这两个部分中,唯一的变化是添加了问号,但问号在每种情况下都有不同的含义.

此外,在您的一个示例中,文本ver.和版本号之间没有空格,因此您应该考虑在正则表达式中使空格可选.

请参阅Rubular上的正则表达式.