正则表达和重音

时间:2013-03-28 02:09:52

标签: regex

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

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

单词:

mi - 匹配

mí - 不匹配

mias - 匹配

mías - 不匹配

我尝试使用\s代替\b,但我匹配空格 我该如何解决这个问题?

由于

4 个答案:

答案 0 :(得分:1)

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

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

包含引号char表示带有撇号的单词 - 例如“不能” - 也是匹配的。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您正在尝试匹配unicode字符,根据您使用的语言,这些字符可能更复杂或更简单。此链接可能有助于您更好地理解:

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

答案 3 :(得分:0)

从你的问题和评论听起来像是:

  • 鉴于字符串:mi,tú,tus,mí,mís,mias,是的。但是我需要匹配带有重音的单词,比如tú和tus,mí和mís。但不是mísa -
  • 匹配:mi,tú,tus,mí,mís,mias
  • 不匹配:mías

此powershell显示匹配字符串适用于您列出的所有案例

$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

产量

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'