在我的Java应用程序中,我想使用一个正则表达式来知道文本中是否存在字符串。
我要介绍的情况是这种情况:假设我的原始文字是以下法语文字(带有重音符号):
démo test
我想使用正则表达式了解文本中是否存在单词demo
(无重音)。关键是:我无法更改原始文本(例如,我不能使用Normalizer.normalize()
,因为我正在使用以正则表达式作为参数的库。
这是我尝试过的:
"(?i)démo"
,则有一个匹配项(因为存在démo
)"(?i)demo"
,则没有匹配项,但我也想在这里进行匹配。我希望正则表达式对重音不敏感。到目前为止,我还没有找到可以涵盖该特定情况的正则表达式。
有没有可以解决这种情况的正则表达式?
感谢您的帮助。
答案 0 :(得分:0)
假设您确实无法更改输入文本,则可以执行以下操作:
如果输入文本采用分解形式,则意味着démo
由unicode码点d
e
COMBINING ACUTE ACCENT
m
o
组成,您可以选择匹配重音:
de\pM?mo
其中\pM
描述unicode属性"Mark"。这将匹配所有标记。如果您只关心确切的口音,也可以选择直接匹配\u0301
如果您的文本采用组成格式,则意味着démo
由Unicode代码点d
LATIN SMALL LETTER E WITH ACUTE
m
o
组成,您只需要在正则表达式中手动进行匹配:
d(e|é)mo
答案 1 :(得分:0)
一种方法是修改regex文字以搜索并替换带重音符号的
带有类的字符。
Regex string Replace string
---------------------------------------------
Find any one Replace with this lieral:
of these:
[aâàä] -> [aâàä]
[cç] -> [cç]
[eéèêë] -> [eéèêë]
[iîï] -> [iîï]
[oô] -> [oô]
[uùûü] -> [uùûü]
[?œ] -> ????
这需要在搜索字符串上运行7个独立的正则表达式。
这将是全局查找/替换操作,共七次。