【问题标题】:How to check Equal Sign in string using REGEX in C#如何在 C# 中使用 REGEX 检查等号字符串
【发布时间】:2021-04-13 04:44:56
【问题描述】:

我想检查如下所示的字符串

第一个 radius = 120

第二个 radius = 'value'

这是我的代码

v1 = new Regex(@"^[A-Za-z]+\s[=]\s[A-Za-z]+$");
if (v1.IsMatch(singleLine))`
{
    ...
    ...
}

使用@"^[A-Za-z]+\s[=]\s[A-Za-z]+$"这个表达式匹配第二个字符串但不是第一个,当使用这个@"^[A-Za-z]+\s[=]\s\d{0,3}$"时只匹配第一个。

我也想检查radius = 'val01'

【问题讨论】:

  • 这三个例子是否涵盖了所有可能的情况?我的意思是:你应该提到匹配条件是什么......这三种情况在我看来并不像所有可能的情况。即:RHS 中的数字是否始终为三位数?
  • ^[A-Za-z]+\s=\s(?:[A-Za-z]+|\d{1,3}|[A-Za-z]+\d{1,2})$ 怎么样,根据您向我们展示的内容使用一些替代方法。我猜你可以根据自己的需要解除一些限制。
  • 使用@"^[A-Za-z]+\s=\s(?:'[A-Za-z0-9]+'|\d+)$"
  • 您尝试的模式^[A-Za-z]+\s[=]\s[A-Za-z]+$与第二个字符串radius = 'value'不匹配如果您不是要匹配单引号,您可以将匹配数字添加到第二个字符类^[A-Za-z]+\s[=]\s[A-Za-z0-9]+$@ 987654322@

标签: c# .net regex


【解决方案1】:

根据您的努力,您似乎正在尝试提出建议

^[A-Za-z]+\s=\s(?:'[A-Za-z0-9]+'|\d{1,3})$

请参阅regex demo详情

  • ^ - 字符串开头
  • [A-Za-z]+ - 一个或多个 ASCII 字母
  • \s=\s - 一个 = 用单个空格字符括起来的字符
  • (?:'[A-Za-z0-9]+'|\d{1,3}) - 匹配的非捕获组
    • '[A-Za-z0-9]+' - ',然后是一个或多个 ASCII 字母或数字,然后是 '
    • | - 或
    • \d{1,3} - 一位、两位或三位数字
  • $ - 字符串结尾(实际上,\z 在验证时更安全,因为在 \z 之后不能有最终尾随换行符,$ 之后可以有这样的换行符,但这也取决于您如何获得输入)。

【讨论】:

    【解决方案2】:

    如果您尝试的模式 ^[A-Za-z]+\s[=]\s[A-Za-z]+$ 与第二个字符串 radius = 'value' 匹配,则意味着 'value' 仅包含字符 A-Za-z。

    在这种情况下,您可以将匹配的数字添加到第二个字符类:

    ^[A-Za-z]+\s=\s[A-Za-z0-9]+$
    

    如果您想匹配 1-3 位数字或至少一个字符 A-Za-z 后跟可选数字:

    ^[A-Za-z]+\s=\s(?:[0-9]{1,3}|[A-Za-z]+[0-9]*)$
    

    模式匹配:

    • ^ 字符串开始
    • [A-Za-z]+\s=\s 将第一部分与字符 A-Za-z 和 = 符号匹配(注意 = 不必在方括号之间)
    • (?:非捕获组
      • [0-9]{1,3} 匹配 1-3 位 (您可以使用 \d{0,3},但由于 0,它也会匹配一个空字符串)
      • |或者
      • [A-Za-z]+[0-9]* 匹配 1+ 个字符 A-Za-z 后跟可选数字
    • )关闭非捕获组
    • $字符串结束

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 2021-11-04
      • 2015-12-23
      • 2019-11-26
      相关资源
      最近更新 更多