【问题标题】:Regex to only match words without special symbols or numbers正则表达式仅匹配没有特殊符号或数字的单词
【发布时间】:2016-11-15 08:54:15
【问题描述】:

我正在尝试找出如何匹配“word”而不是“word1”、“w1ord”或“word!”的任何变体!在哪里 ”!”可以是任何“#%!”

基本上我想匹配只使用 A-Z 和 a-z 的单词。以下不起作用:/

([A-Za-z])\w+

因为 "word%5" 是匹配的。

【问题讨论】:

  • 使用边界:\b\w+\b.
  • 好吧,现在,我想你需要Regex.Matches(str, @"(?<!\S)[a-zA-Z]+(?!\S)")
  • 那么,您是要检查一个单词或 string 是否只有英文字母?

标签: c# regex


【解决方案1】:

你可以用 linq 做到这一点。查看ASCII Table 以查看从A 到Z 的字符值。之后你可以将你的字符串转大,只检查从 65 到 90 的范围。

bool notOnlyLetters = yourStringValue.ToUpper().Any(x => !(x >= 65 && x <= 90));

【讨论】:

  • 这也能找到非英文字母。
  • @WiktorStribiżew 好吧,你是对的,我想念他只想要从 A 到 Z。
  • @WiktorStribiżew 现在应该没问题了
  • 我认为它不起作用。您在该范围内包含了一些非字母。见ideone.com/IATcQx
  • @WiktorStribiżew 好吧,我没仔细看 ASCII 表。现在应该没问题了。
【解决方案2】:

以下正则表达式接受包含在以下之间的每个“单词”:

  • 一行的开头或一个空格(^|\s)

  • 一个空格或一行的结尾。 (\s|$)

(^|\s)字(\s|$)

如果您想查找仅由字母字符组成的每个单词,您可以按如下方式更改正则表达式:

(^|\s)[a-zA-Z]+(\s|$)

【讨论】:

    【解决方案3】:

    要匹配由英文字母组成的整个字符串,请使用 LINQ 或正则表达式:

    var hasAllEnglishLetters = x.All(c => (c >= 65 && c <= 90) || c >=97 && c<= 122));
    var hasAllEnglishLetters = Regex.IsMatch(x, @"^[a-zA-Z]+$");
    

    要匹配较大字符串中的单词,您也可以使用正则表达式或 LINQ 方法:

    var s = "Match word but not word1, w1ord or word!";
    var res_linq = s.Split().Where(x => x.All(c => (c >= 65 && c <= 90) || c >=97 && c<= 122));
    Console.WriteLine(string.Join(";", res_linq));
    // REGEX
    var res_regex = Regex.Matches(s, @"(?<!\S)[a-zA-Z]+(?!\S)").Cast<Match>().Select(m=>m.Value);
    Console.WriteLine(string.Join(";", res_regex));
    

    online C# demo

    LINQ 方法详情:使用Split(),字符串被分成非空白符号块,.All(c =&gt; (c &gt;= 65 &amp;&amp; c &lt;= 90) || c &gt;=97 &amp;&amp; c&lt;= 122) 确保只提取属于 ASCII 字母(65 到 90)的块- ASCII 大写字母,97 到 122 为小写字母)。

    正则表达式方法:如果[a-zA-Z]+(或字符串开头)之前没有空格、1 个或多个 ASCII 字母以及否定的前瞻 (?!\S),则 (?&lt;!\S) 后向匹配失败如果字母后没有空格(或字符串结尾),则匹配失败。

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 2015-01-28
      • 1970-01-01
      • 2017-12-17
      • 2016-12-08
      • 2021-11-03
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多