匹配双字母的单词

时间:2015-11-18 11:14:46

标签: java regex

我正在使用

^(?i)(?=.*\bWORD_TO_MATCH\b).*$

我还要用双字母来匹配单词... 例如:

“Matthew Jonson”与

匹配
^(?i)(?=.*\bmatthew\b)(?=.*\bjonson\b).*$

但是“Mathew Jonson”没有

另一个例子:

ABA应该匹配(正则表达式\ ABA \)和(正则表达式\ ABBA \)

如何使正则表达式“双字母不敏感”?

3 个答案:

答案 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}代替+执行相同操作。