字符串中带有可选单词的正则表达式
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(.*)
你的问题是你在正则表达式中要求两个 spaces (\s) 如果不包含 thisisoptional,则不符合你的情况。简单的解决方法是在第二个捕获组中包含第二个 space:
(.*?)\s(thisisoptional\s)?(.*)
this 选择任何内容,然后是 thisisoptional,然后是任何内容
你不能只用 (\S+)
将所有非空白字符分组,然后如果匹配到三个则删除中间的字符吗?
此正则表达式的示例 运行:https://regex101.com/r/IIyM5Z/1
我尝试对以下行进行正则表达式(每个单词由一个 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(.*)
你的问题是你在正则表达式中要求两个 spaces (\s) 如果不包含 thisisoptional,则不符合你的情况。简单的解决方法是在第二个捕获组中包含第二个 space:
(.*?)\s(thisisoptional\s)?(.*)
this 选择任何内容,然后是 thisisoptional,然后是任何内容
你不能只用 (\S+)
将所有非空白字符分组,然后如果匹配到三个则删除中间的字符吗?
此正则表达式的示例 运行:https://regex101.com/r/IIyM5Z/1