我正在使用
^(?i)(?=.*\bWORD_TO_MATCH\b).*$
我还要用双字母来匹配单词... 例如:
“Matthew Jonson”与
匹配^(?i)(?=.*\bmatthew\b)(?=.*\bjonson\b).*$
但是“Mathew Jonson”没有
另一个例子:
ABA应该匹配(正则表达式\ ABA \)和(正则表达式\ ABBA \)
如何使正则表达式“双字母不敏感”?
答案 0 :(得分:1)
您可以使用back reference:
(.)\1
(.)
将任意角色中的一个捕获到捕获组1
中。 \1
匹配,如果再次显示上一个匹配项。
如果您不关心任何字符,但字母使用:
([A-Za-z])\1
查找带有双字母的单词的最终正则表达式应如下所示:
\b.*([A-Za-z])\1.*\b
您可以在线测试:http://fiddle.re/u4ar46
答案 1 :(得分:0)
我认为最好的方法是itertools。
>>> import itertools
>>> ''.join(ch for ch, _ in itertools.groupby("Matthew Jonson"))
'Mathew Jonson'
答案 2 :(得分:0)
据我所知,使用正则表达式没有内置方法可以做到这一点。但是,您可以在单词中的每个字符后面添加+
,以允许该字符的一个或更多个实例。
您可以编写辅助函数来自动插入这些量词。
这是Python中的一个示例,但您可以在Java中执行相同的操作:
>>> import re
>>> names = "Mathew Jonson Matthew Jonson Matthew Johnson"
>>> name = "mathew jonson"
>>> "(?i)" + "+".join(name) + "+"
'(?i)m+a+t+h+e+w+ +j+o+n+s+o+n+'
>>> re.findall("(?i)" + "+".join(name) + "+", names)
['Mathew Jonson', 'Matthew Jonson']
如果您只想允许该字符的一个或两个实例,则可以使用{1,2}
代替+
执行相同操作。