字符串内带有可选单词的正则表达式

标签 regex string option-type cpu-word

我尝试对以下行进行正则表达式(每个单词用一个空格分隔):

Firstpartstring thisisoptional secondpartstring

我希望每个字符串作为组匹配:

Group 1.    Firstpartstring
Group 2.    thisisoptional
Group 3.    secondpartstring

这是我到目前为止尝试过的:

(.*?)\s(thisisoptional)?\s(.*)

唯一的问题是,如果字符串中不存在“thisisOptional”,我不会得到任何结果。

我期望:

Group 1.    Firstpartstring
Group 2.    
Group 3.    secondpartstring

请查看此演示:https://regex101.com/r/YBlYXm/1

有人能帮我找到正确的方向吗?

谢谢

最佳答案

您的问题是,您在正则表达式中要求两个空格(\s),如果不包含 thisisoptional ,则这两个空格与您的情况不匹配。简单的解决方法是将第二个空格包含在第二个捕获组中:

(.*?)\s(thisisoptional\s)?(.*)

这选择任何内容,然后是可选的,然后是任何内容

关于字符串内带有可选单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57733239/

相关文章:

regex - 不要提取错误的子串/数字

swift - 为什么我不能将隐式解包的可选项作为 UnsafeMutablePointer 传递?

regex - 将 Eclipse 的 "Open Call Hierarchy"过滤为仅我的公司/项目

python - 为什么 re.sub ('.*?' , '-' , 'abc' ) 返回 '-a-b-c-' 而不是 '-------' ?

regex - 如何替换r中某列中字符串的第n个字符

java - 字符串替换反斜杠

java - 如何初始化 Optional<List<T>>?

java - 使用选项类型是否不需要 if 语句?

c++ - 长正则表达式会导致错误

javascript - javascript 中的正则表达式出现意外结果