【问题标题】:Using Regex to find a reference with specific length [duplicate]使用正则表达式查找具有特定长度的参考 [重复]
【发布时间】:2022-01-27 19:44:33
【问题描述】:

我正在寻求有关使用 Regex 从字符串中提取某些数据的帮助。我是 Regex 的新手,对编码还是比较陌生。我一直在寻找其他问题,但找不到任何初始字符串可能包含多个数据的地方,例如我的。

在下面,我希望提取文档编号并分配给“docNumber”字符串。

大小写始终为 10 位数字。 客户可能是 4 或 5 位数字。 文档的长度始终为 7 位数。

问题是我的正则表达式只是捕获了案例编号的前 7 位数字。

static void Main(string[] args)
    {

        String testText = "Case 1628855986 Customer 7739 Document 9153862";

        String docNumber = Regex.Match(testText, @"\d{7}").Value;

        Console.WriteLine("The reference you are looking for is: " + docNumber);

    }

任何帮助将不胜感激!

【问题讨论】:

  • (?<=^|\s)\d{7}(?=$|\s),假设它总是被一个空白字符封装。 (?<=^|[^\d])\d{7}(?=$|[^\d]),确保 7 位文档前后的字符不是数字。 (?<=^|[^\d]) 中的第一个 ^ 表示行首,通过 OR 运算符 | 与负字符集 [^\d] 分隔,这意味着它匹配一个 7 位数字,该数字也标志着一个行或前面没有数字的 7 位数字。

标签: c# regex


【解决方案1】:

如果文档编号始终以Document 开头,则可以使用zero-width positive lookbehind assertion 而不是依赖编号的长度:

string docNumber = Regex.Match(testText, @"(?<=Document )\d+").Value

【讨论】:

  • 谢谢@Heinzi。不幸的是,事实并非如此。该字符串将由向我们发送数据的人确定。有时他们可能只是把号码发给我们。例如“1628855986 7739 9153862”。它们也可能按任何顺序排列,所以很遗憾这不起作用!
  • @liamtharris:啊,好的。在这种情况下,来自链接副本的“固定长度数字”解决方案应该可以工作。
  • 再次感谢亨氏!就是这样! String docNumber = Regex.Match(testText, @"(?
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2018-10-12
  • 1970-01-01
相关资源
最近更新 更多