我有一个正则表达式,用于清理帐户名,在新的一年里,我必须对其进行调整,以捕获另一个团队正在使用的帐户名的新版本。但是,我很难理解为什么简单地添加另一种选择是行不通的。
这是我正在使用的:
^.*\b((?i)foxtrot movie|whiskey|whiskeyfoxtrotmovie)\b.*$
这对于数据中帐户名称的其他版本(主要是“狐步电影”)非常有效。但是现在我要它捕获“威士忌狐步舞电影”和“狐步舞电影”。
为澄清起见,两者都在此正则表达式经过的列中。我希望当其中任何一个出现时捕获整个字符串。我从不希望不捕获“威士忌”,并且“威士忌Foxtrot电影”和“ Foxtrot电影”是许多其他帐户名称中的不同行。
我知道Regex很渴望,因此为了鼓励与较大的字符串匹配,我将边界内的表达式调整为
\b((?i)whiskeyfoxtrotmovie|whiskey foxtrot movie|whiskey|foxtrot movie)\b
,但即使是较长的字符串,也只能捕获“狐步电影”。我不知道为什么它与第二种捕获“威士忌狐步舞电影”的方法不匹配
(whiskey)? foxtrot movie
导致相同的错误。
移动订单似乎也无济于事。在()
中包含每个替代项也会使我失望。
我对此仍然很陌生,所以也许我对边界有些不了解?但这只要在表达式中同时没有whiskey foxtrot movie
和foxtrot movie
时就可以使用。也许是空格?
欢迎任何见识。
答案 0 :(得分:1)
问题出在第一个贪婪的.*
中,当最左边的大部分文本已经被第一个.*
抓住时,尝试使用其他方法。
如果必须匹配整个字符串,则将第一个.*
替换为.*?
,但是使用允许部分匹配并只使用
(?i)\b(whiskeyfoxtrotmovie|whiskey foxtrot movie|whiskey|foxtrot movie)\b
请参见regex demo。
也就是说,删除^
和$
锚点以及封闭的.*
模式。