-1

这个问题让我发疯,我需要用重音排除这个词,我遇到了问题。特别是我认为这\b不适用于带有 áéíóúñ 之类的重音字母例如,我有这个正则表达式:

\b(m[ií]s*|m[ií][ao]s*|t[úu]s*|s[u]s*)\b

话:

米匹配

mí - 不匹配

mias - 匹配

mias - 不匹配

我尝试使用\s而不是\b但我匹配空格我该如何解决这个问题?

谢谢

4

4 回答 4

1

此正则表达式将匹配所有没有任何重音字母的单词:

\b[a-zA-Z']+\b

包括引号字符意味着带有撇号的单词 - 例如“can't” - 也匹配。

请注意,正则表达式\w不适合,因为它包含数字和下划线字符。

于 2013-03-28T02:22:36.333 回答
0

您正在尝试匹配 unicode 字符,这可能或多或少复杂,具体取决于您使用的语言。此链接可能会帮助您更好地理解:

http://www.regular-expressions.info/unicode.html

于 2013-03-28T09:34:22.800 回答
0

如果我错了,请纠正我,但如果您使用的是 java,则重音被视为非单词字符,因此您可以使用 \w 与 \W 检测。这可能是您使用的任何语言的情况。

于 2013-03-28T02:15:26.630 回答
0

From your question and comments is sounds like:

  • Given the 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 –</li>
  • Match : mi, tú, tus, mí, mís, mias
  • Don't Match: mías

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'
于 2013-05-01T03:44:25.450 回答