【问题标题】:Regex C#. Match specific substring and return that substring only正则表达式 C#。匹配特定子字符串并仅返回该子字符串
【发布时间】:2013-11-28 11:53:49
【问题描述】:

我一直在努力解决这个问题,我想我已经非常接近真正让它发挥作用了,但我似乎做不到。

我一直在尝试使用正则表达式从字符串中提取特定的子字符串。此子字符串必须匹配一组特定的字符串/数字。然后在此之后,它应该返回到另一个函数,它将只提取数字。

这里有一些字符串的例子

"(DEV #198) I am a dev testing 23 different things."
"(dev #9540) I am a dev testing different other things."
"(FQ #1140) I am a dev testing different things."
"(fq #910) I am a dev testing different other things."

最后,我希望根据输入将 198、9540、1140 或 910 作为最终变量。

到目前为止,这是我的正则表达式。我想它已经接近了,但我需要一些帮助。 (注意 C# 的双反斜杠)。

^(?=.*?\\b(dev|DEV|fq|FQ)\\b)(?=.*?\\b[0-9]{3,4}\\b).*$

这也是我正在使用的代码片段。

string caseNumber = cpTicket.Desc;
string regexPattern = "^(?=.*?\\b(dev|DEV|fq|FQ)\\b)(?=.*?\\b[0-9]{3,4}\\b).*$";
caseNumber = Regex.Match(caseNumber, regexPattern).ToString();

这就是我所知道的。如果您能提供帮助,我将不胜感激:D

【问题讨论】:

    标签: c# regex string


    【解决方案1】:

    试试下面的表达式:

    (?<=(?:dev|fq) #)\d+
    
    • (?&lt;=):这是为了确保数字前面是后面的内容。
    • (?:dev|fq):匹配 devfq
    • #:匹配一个空格,后面跟着一个哈希#
    • \d+:匹配一位或多位数字。

    打开不区分大小写模式,以便 devfq 在所有情况下都能匹配。

    您可以像这样在正则表达式本身中转换不区分大小写:

    (?i)(?<=(?:dev|fq) #)\d+
    

    在 C# 中:

    var input = "(DEV #198) I am a dev testing 23 different things.";
    var matches = Regex.Matches(input, @"(?i)(?<=(?:dev|fq) #)\d+");
    

    注意如何在字符串前使用@ 来创建所谓的逐字字符串,这样您就不必双重转义所有内容。

    【讨论】:

    • 啊太棒了,效果很好!非常感谢,我发现我自己的实现还差得很远!
    • @MightyLampshade 欢迎您,很高兴我能提供帮助。
    • 不用(?i),你可以用(?i:dev|fq)
    • @PierlucSS 感谢您的反馈,我不知道您可以将这样的标志嵌套在不匹配的组中,我希望我能给您投票,因为这是您应得的.
    【解决方案2】:

    我认为你的模式可以简单地是:

    "\(.*?\#(\d*)\)"
    

    这将匹配括号中的组并返回数字。

     var m = Regex.Match(input, @"\(.*?\#(\d*)\)");
     if (m.Groups.Count > 0)
     {
         string matchedNumber = m.Groups[1].Value;
     }
    

    【讨论】:

    • 啊,这行得通,它返回 DEV # 和自己的数字。两个答案都很棒,但我只能将一个标记为正确的一个:(否则我会标记你们两个。
    • 不用担心,我很高兴它有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2018-06-12
    • 1970-01-01
    • 2012-11-10
    • 2011-11-08
    • 2022-01-17
    相关资源
    最近更新 更多