【问题标题】:Using RegEx to ignore empty strings and spaces使用 RegEx 忽略空字符串和空格
【发布时间】:2011-07-06 00:24:33
【问题描述】:

我有以下简单的测试,由于某种原因没有返回 true。

string[] test = new string[] { "A", " ", " ", "D", "" };
Regex reg = new Regex(@"^[A-Z]\s$");
bool ok = test.All(x => reg.IsMatch(x));

我也尝试将 \s 放在方括号内,但这也不起作用

我想确保数组中所有非空字符或空格字符都与 A-Z 匹配。

我意识到我可以在 All 之前执行 Where(x=>!String.IsNullorEmpty(x) && x != " ") 但我认为 Regex 可以处理这种情况

【问题讨论】:

  • 在 .Net 4 中,您还拥有 String.IsNullOrWhiteSpace,它消除了对 && x != " " 的需求。虽然无法使用正则表达式,抱歉(我很烂)
  • 请尽量清楚你的意思是字符串,哪里是字符:“数组中所有非空字符串的字符”——字符和字符串不是一回事。跨度>
  • @Jon:仍然不清楚你的意思,因为你有一个 strings 数组。我认为如果您可以将示例简化为匹配 single 字符串,那将非常有帮助。一旦你弄清楚了如何让单个字符串按照你想要的方式工作,你就可以继续使用All 匹配多个字符串。

标签: c# .net regex string


【解决方案1】:

我想你想要:

Regex reg = new Regex(@"^[A-Z\s]*$");

这基本上是说“字符串完全由空格或 A-Z 组成”。

如果要强制为单个字符或为空,只需将其更改为:

Regex reg = new Regex(@"^[A-Z\s]?$");

【讨论】:

  • 你的意思是它会忽略空格,即/它不会尝试匹配这些元素
  • @Jon:我不明白你的意思。它不会忽略空格 - 它会匹配空格。所以“A B C”将匹配第一个正则表达式,“A”也会匹配,但“A0”不会。
  • 我认为我需要执行 Where 子句来去除空格和空,因为 All 将运行在每个元素上
  • @Jon:目前还不清楚您要做什么。第一个正则表达式也会匹配空格和空字符串,所以你不需要先把它们去掉。
  • @Jon-not-Skeet:如果将行 Console.WriteLine(ok); 添加到问题中的代码中,然后使用此答案中的任一正则表达式,输出为 True。这不是你想要的吗?
【解决方案2】:

Enumerable.All<TSource> Method 确定序列的所有元素是否满足条件。

【讨论】:

  • 是的,我想我需要 Where 子句!
【解决方案3】:

正则表达式^[A-Z]\s$表示:双字符字符串,其第一个字符为A-Z,第二个字符为空格。你真正想要的是^[A-Z\s]*$

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多