简单的正则表达式问题对我来说似乎很难回答

问题描述 投票:0回答:1

给定输入文本

RANDOMNUMBERS Can I have some milk please
或者
RANDOMNUMBERS Can I have some milk

我需要匹配两个字符串并仅捕获

Can I have some milk
部分,忽略 please(如果存在)并将内容放入相同的捕获组中,无论 please 是否存在。

假设

[RANDOMNUMBERS] can I have 
永远都在那里,那么除了
please
永远不会出现在主体中之外,其他任何东西都可以在之后出现,它只可能会或可能不会在最后。如果存在的话,应从捕获组中省略
[RANDOMNUMBERS]
please

例如

RANDOMNUMBERS Can I have more toast please
RANDOMNUMBERS Can I have more toast
两者应产生
Can I have more toast
,因为捕获组编号相同

我最接近解决这个问题的是

(?(?=(?!.*please).*Can I have).*(Can I have.*)|.*(Can I have.*)( please))

上面确实捕获了我想要的字符串

Can I have more toast
,无论
please
是否存在,但是捕获的短语被放入不同的组号中,即当
group 1
被省略时为
please
,当
group 2
为时为
please
存在。

regex regex-group
1个回答
0
投票

这应该可以解决这个问题:

[^\d ].+[^please]
,只要随机数后面总是跟着一个非数字。

[^\d ].+[^please]

请注意,这将捕获直到please之前的所有内容,这意味着在正常情况下它将包含please之前的最后一个空格。不过,在任何编程语言中,从尾随空格中修剪捕获的字符串应该很容易。

© www.soinside.com 2019 - 2024. All rights reserved.