【问题标题】:"Enter" issue in Regex of C#C# 正则表达式中的“输入”问题
【发布时间】:2016-02-22 01:44:36
【问题描述】:

那里 我对 C# 中的正则表达式有疑问, 代码:

// For 1D barcode scanner
Regex regex = new Regex("^(.*)\x0D$", RegexOptions.Compiled);
var match = regex.Match("1234\r");

match.Success 为真。然后我将代码更改如下:

 // For 2D barcode scanner
 Regex regex = new Regex("^(.*)$", RegexOptions.Compiled);
 var match = regex.Match("1234\r");

match.Success 仍然为真(期望为假)。不知道哪里出错了。

其实字符串“1234\r”是一维条码扫描器的结果,在我的软件中一维条码扫描器的后缀是“\x0D”,而在我的软件中二维条码扫描器的后缀是空的。我认为二维条码的正则表达式一定有问题。

【问题讨论】:

  • 为什么应该是false. 匹配除\n 之外的任何字符。二维条码扫描器是否不允许返回\x0D作为其最后一个数据字符?
  • 当我使用后缀为“\X0D”的一维条码扫描器时,二维条码扫描器的正则表达式应该为假。物理二维条码没有后缀,所以它的正则表达式是“^(.*)$”。

标签: c# regex


【解决方案1】:

在默认设置下,$ 被解释为输入字符串的结尾,而不是行的结尾。这将允许您的 .* 匹配任何可能添加的尾随空格。

如果你想排除这个,你可以用一个字符类来做到这一点,比如^([^\r]*)$

【讨论】:

    【解决方案2】:

    我在这个案例中使用了另一个工作循环,代码如下:

     if (string.IsNullOrEmpty(Prefix) && string.IsNullOrEmpty(Suffix))  
        regex = new Regex("^[a-z0-9!\"#$%&'()*+,.\\/:;<=>?@\\[\\] ^_`{|}~-]*$", RegexOptions.Compiled);
     else
         {
           regex = new Regex($"^{this.Prefix}(.*){this.Suffix}$", RegexOptions.Compiled);
         }
    

    表示如果后缀和前缀为空或为空,我使用正则表达式匹配“所有可打印的章程”。

    【讨论】:

      猜你喜欢
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      相关资源
      最近更新 更多