这个问题让我发疯,我需要用重音排除这个词,我遇到了问题。特别是我认为这\b
不适用于带有 áéíóúñ 之类的重音字母例如,我有这个正则表达式:
\b(m[ií]s*|m[ií][ao]s*|t[úu]s*|s[u]s*)\b
话:
米匹配
mí - 不匹配
mias - 匹配
mias - 不匹配
我尝试使用\s
而不是\b
但我匹配空格我该如何解决这个问题?
谢谢
这个问题让我发疯,我需要用重音排除这个词,我遇到了问题。特别是我认为这\b
不适用于带有 áéíóúñ 之类的重音字母例如,我有这个正则表达式:
\b(m[ií]s*|m[ií][ao]s*|t[úu]s*|s[u]s*)\b
话:
米匹配
mí - 不匹配
mias - 匹配
mias - 不匹配
我尝试使用\s
而不是\b
但我匹配空格我该如何解决这个问题?
谢谢
此正则表达式将匹配所有没有任何重音字母的单词:
\b[a-zA-Z']+\b
包括引号字符意味着带有撇号的单词 - 例如“can't” - 也匹配。
请注意,正则表达式\w
不适合,因为它包含数字和下划线字符。
您正在尝试匹配 unicode 字符,这可能或多或少复杂,具体取决于您使用的语言。此链接可能会帮助您更好地理解:
如果我错了,请纠正我,但如果您使用的是 java,则重音被视为非单词字符,因此您可以使用 \w 与 \W 检测。这可能是您使用的任何语言的情况。
From your question and comments is sounds like:
This powershell shows the match string is working for all the cases you've listed
$Matches = @()
$String = 'mi, tú, tus, mí, mís, mias, Yes. But I am needing to match words with accent, like tú and tus and mí and mís. BUT not mísa – '
([regex]'(?=\b)(mí|m[ií]s*|m[ií][ao]s*|t[úu]s*|s[u]s*)(?=\b)').matches($String) | foreach {
write-host "at $($_.Groups[1].Index) = '$($_.Groups[1].Value)'"
} # next match
yields
at 0 = 'mi'
at 4 = 'tú'
at 8 = 'tus'
at 13 = 'mí'
at 17 = 'mís'
at 22 = 'mias'
at 83 = 'tú'
at 90 = 'tus'
at 98 = 'mí'
at 105 = 'mís'