我想在& amazon -
之后选择所有内容。
如果未找到,则应返回整个字符串
字符串:
'adidas & amazon - cool shirt'
我提出的最好的事情是:
(?(?=.*\bamazon\b)(\bamazon\b \- (.+ *))|(.*))
但它也会回归亚马逊部分。
答案 0 :(得分:1)
以下正则表达式适合您。
(?<=&\samazon\s-).*|^(?!.*&\samazon\s-).*$
(?<=&\samazon\s-).*
匹配&
空间亚马逊空间连字符之后的所有字符。
^(?!.*&\samazon\s-).*$
匹配没有& amazon -
字符串的整行。
如果您只想处理水平空格,请将\s
更改为\h
。
或强>
&\s*amazon\s*-\K.*|^(?!.*\samazon\s-).*$
\K
会丢弃之前匹配的字符,以便在决赛中打印出来。这完成了可变长度正lookebhind断言的工作。
答案 1 :(得分:0)
您可以使用此正则表达式:
^(?|(?:.*?&\s*amazon\s*-\s*)(.*)|(.*))$
您匹配的数据将在捕获的组#1中可用。
此处(?|...)
是一个非捕获组,确保此括号内的所有捕获的组都以相同的索引开始,即为1.
这个正则表达式使用简单的正则表达式替换。在LHS,我们有:
(?:.*?&\s*amazon\s*-\s*)(.*)
将& amazon -
之后的字符串放入捕获的组#1
在RHS上我们只有:
(.*)
将整行放入捕获的组#1本身(由于使用(?|...)
答案 2 :(得分:0)
使用您之前稍微调整过的模式应该有效:
(?(?=.*&\s\bamazon\b).+)(.+\-\s(.+))
如果您希望此匹配amazon
,无论您在-
之前的位置如何,都可以使用:
(?(?=.*\bamazon\b).+)(.+\-\s(.+))
示例:
https://regex101.com/r/kK3hP0/1 //在& amazon
-
https://regex101.com/r/nG3yK8/1 //在amazon
-