Regex匹配模式加上字符串的其余部分,直到下一个点、逗号或空格



假设我有一个字符串WORK-232-3213-2323。已知的可能情况:

WORK-232-3213-2323, some text
WORK-232-3213-2323. some text
WORK-232-3213-2323.xlsx
WORK-232-3213-2323 some text
WORK-232-3213-2323/some text

格式WORK-232-3213-2323-some text也可能发生,但无需处理这种情况下的

我当前的正则表达式能够用WORK-232-3213-2323模式捕获所需的字符串,但作为输出,我得到了-232-3213-2323。如何使它能够捕获字符串中的WORK-加上其余文本,直到下一个空格、点、斜线或逗号?

当前正则表达式:WORK-(.*?)[s]

C#:

Regex pattern = new Regex("WORK-(.*?)[s]");
string result = pattern.Match(myString).Groups[1].Value

您可以在不使用捕获组的情况下使用匹配,并使用不包括逗号、句点或whitspace字符的否定字符类。

bWORK-[^.,s]+
  • bWORK-匹配前面有单词边界的WORK以防止部分匹配
  • [^.,s]+否定字符类,以匹配除.,或whitspace字符之外的任何字符的1+倍

Regex演示

string[] strings = { 
"WORK-232-3213-2323, some text",
"WORK-232-3213-2323. some text",
"WORK-232-3213-2323.xlsx",
"WORK-232-3213-2323 some text",
"WORK-232-3213-2323/some text"
};
string pattern = @"bWORK-[^.,s]+";
foreach (String s in strings) {
Console.WriteLine(Regex.Match(s, pattern).Value);
}

输出

WORK-232-3213-2323
WORK-232-3213-2323
WORK-232-3213-2323
WORK-232-3213-2323
WORK-232-3213-2323/some

如果不想匹配最后一行,可以使用捕获组并在其后匹配.,或空白字符

b(WORK-[^.,s/]+)[.,s]

Regex演示

例如,使用相同的字符串示例:

string pattern = @"b(WORK-[^.,s/]+)[.,s]";
foreach (String s in strings) {
Console.WriteLine(Regex.Match(s, pattern).Groups[1].Value);
}

输出

WORK-232-3213-2323
WORK-232-3213-2323
WORK-232-3213-2323
WORK-232-3213-2323

在我看来,您可以使用以下模式来处理所有情况,也可以使用可能发生的情况:

bWORK(?:-[0-9]+)+

查看在线演示

我在c#中不是英雄,所以我用了一些我能找到的代码来测试这个:

using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var s = @"WORK-232-3213-2323, some text";
var pattern = @"bWORK(?:-[0-9]+)+";

Regex r = new Regex(pattern);       

Match m = r.Match(s);
if (m.Success) 
{
Console.WriteLine(m.Value);
}
}
}

或者,您可以使用bWORK(?:-d+)+和带有ECMAScript选项集的Regex r = new Regex(pattern, RegexOptions.ECMAScript);

最新更新