gpt4 book ai didi

c# - 正则表达式 C#。匹配特定的子字符串并仅返回该子字符串

转载 作者:行者123 更新时间:2023-11-30 16:14:51 29 4
gpt4 key购买 nike

我一直在为此苦恼,我想我已经非常接近让它真正发挥作用了,但我似乎做不到。

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

这里有一些字符串的例子

"(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

最佳答案

试试下面的表达式:

(?<=(?:dev|fq) #)\d+
  • (?<=) : 这是一个后视,以确保数字前面是后视内的内容。
  • (?: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+");

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

关于c# - 正则表达式 C#。匹配特定的子字符串并仅返回该子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20265518/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com