给定输入文本
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
存在。
这应该可以解决这个问题:
[^\d ].+[^please]
,只要随机数后面总是跟着一个非数字。
[^\d ].+[^please]
请注意,这将捕获直到please之前的所有内容,这意味着在正常情况下它将包含please之前的最后一个空格。不过,在任何编程语言中,从尾随空格中修剪捕获的字符串应该很容易。