正则表达式:不提取可选令牌

时间:2017-12-17 18:41:52

标签: regex

我想从这样的句子中提取单词:

Image

现在,我希望在句子的末尾有一些可选的东西:

I want to (?P<activity>([a-zäöüß\s]+?)+)
I want to have a beer 
-> activity: have a beer

如何更改正则表达式,以便I want to (?P<activity>([a-zäöüß\s]+?)+)(?: with my friends)? I want to have a beer with my friends -> have a beer with my friends 不会包含在活动中?

2 个答案:

答案 0 :(得分:0)

如果你知道在“和我的朋友”之后别的什么就会出现,你可以尝试一个非贪婪的量词并匹配句末:

I want to (?P<activity>([a-zäöüß\s]+?)+?)(?: with my friends)?$

示例:https://regex101.com/r/MG4Ga5/1

否则,也许你可以使用前瞻:

I want to(?P<activity>((?= with my friends)|(\s[a-zäöüß]+))+)

示例:https://regex101.com/r/MG4Ga5/2

答案 1 :(得分:0)

您可以使用positive lookahead检查后面的内容是with my friends还是行$的结尾,如果您想将其设为可选项。

I want to (?P<activity>[a-zäöüß\s]+?)(?= with my friends|$)

<强>解释

  • 匹配I want to
  • 在名为activity (?P<activity>
  • 的命名捕获组中进行匹配
  • 您的角色设置一次或多次[a-zäöüß\s]+
  • 让它非贪婪?
  • 关闭指定的捕获组)
  • 断言以下内容为with my friends或行尾(?= with my friends|$)
相关问题