假设我有一个字符串 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
Format 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
最佳答案
您可以在不使用捕获组的情况下使用匹配,并使用不包括逗号、点或空白字符的否定字符类。
\bWORK-[^.,\s]+
\bWORK-
匹配前面有单词边界的 WORK 以防止部分匹配[^.,\s]+
Negated character class匹配 1+ 次任何字符,除了.
,
或 whitspace char
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]
例如使用相同的示例字符串:
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
关于c# - 正则表达式匹配模式加上字符串的其余部分,直到下一个点、逗号或空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67136597/