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

Regex with optional word inside string

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

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

谁能告诉我正确的方向?

谢谢

可选词前的space也应设为可选;否则,第一个和最后一个单词之间需要两个 space 才能匹配:

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

https://regex101.com/r/YBlYXm/2

你的问题是你在正则表达式中要求两个 spaces (\s) 如果不包含 thisisoptional,则不符合你的情况。简单的解决方法是在第二个捕获组中包含第二个 space:

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

this 选择任何内容,然后是 thisisoptional,然后是任何内容

你不能只用 (\S+) 将所有非空白字符分组,然后如果匹配到三个则删除中间的字符吗?

此正则表达式的示例 运行:https://regex101.com/r/IIyM5Z/1