Regex 正则表达式不匹配它应该使用的第一个选项
我有一个用于清理帐户名的正则表达式,在新的一年里,我必须调整它以捕获另一个团队正在使用的帐户名的新版本。然而,我很难理解为什么简单地添加另一个替代方案是行不通的 以下是我正在使用的:Regex 正则表达式不匹配它应该使用的第一个选项,regex,regex-group,Regex,Regex Group,我有一个用于清理帐户名的正则表达式,在新的一年里,我必须调整它以捕获另一个团队正在使用的帐户名的新版本。然而,我很难理解为什么简单地添加另一个替代方案是行不通的 以下是我正在使用的: ^.*\b((?i)狐步舞电影|威士忌|威士忌狐步舞)\b.*$ 这对于数据中帐户名的其他版本非常有效,主要是“Foxtrot电影”。但现在我想让它捕捉“威士忌狐步舞电影”和“狐步舞电影” 为了澄清,这两个都在这个正则表达式所经过的列中。我希望在其中一个出现时捕获整个字符串。我从来都不希望“威士忌”不被抓取,“威士
^.*\b((?i)狐步舞电影|威士忌|威士忌狐步舞)\b.*$
这对于数据中帐户名的其他版本非常有效,主要是“Foxtrot电影”。但现在我想让它捕捉“威士忌狐步舞电影”和“狐步舞电影”
为了澄清,这两个都在这个正则表达式所经过的列中。我希望在其中一个出现时捕获整个字符串。我从来都不希望“威士忌”不被抓取,“威士忌狐步舞电影”和“狐步舞电影”是其他账户名称中不同的一行
我知道Regex很热心,所以为了鼓励首先匹配较大的字符串,我将边界内的表达式调整为
\b((?i)威士忌狐步舞|威士忌狐步舞电影|威士忌狐步舞电影)\b
,但它只捕获“狐步舞电影”,即使是更长的字符串。我不明白为什么它与拍摄《威士忌狐步舞电影》的第二个选择不匹配
(威士忌)?狐步舞电影
会导致相同的错误。
移动订单似乎也无济于事。将每个备选方案封装在()
中也使我失败
我在这方面还是新手,所以也许我对边界有些不了解?但只要表达式中没有同时包含威士忌狐步舞电影
和狐步舞电影
,这就行了。也许是空间
欢迎任何见解。问题出在第一个
*
中,当第一个*
已经抓取了最左边的大部分文本时,就会尝试其他方法
如果必须匹配整个字符串,请将第一个*
替换为*?
,但使用允许部分匹配的方法并仅使用
(?i)\b(whiskeyfoxtrotmovie|whiskey foxtrot movie|whiskey|foxtrot movie)\b
看
也就是说,删除
^
和$
锚定和包围的*
模式。只需使用(?i)\b(威士忌狐步舞电影|威士忌狐步舞电影|威士忌狐步舞电影)\b
。不要使用*
和锚点。如果必须匹配整个字符串,请将第一个*
替换为*?
。显示失败的代码。@WiktorStribiżew谢谢!卸下锚起了作用。就我个人所知,它们在我的原始代码中不是问题的原因是什么,但我想在哪里添加新的替代方案?我知道您的问题出在第一个贪婪的*
,在第一个*
已经抓取了最左边的大部分文本时尝试了替代方案。所以,(?i)\b(威士忌狐步舞电影|威士忌狐步舞电影|威士忌狐步舞电影)\b
本身应该可以工作。