c# - 正则表达式匹配模式加上字符串的其余部分,直到下一个点、逗号或空格

标签 c# .net 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

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

Regex demo

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 demo

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

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/

相关文章:

php - 正则表达式基础 : grab text between two constants

c# - Assembly.GetTypes() - ReflectionTypeLoadException

c# - 使用 SQLite-net 库创建表

c# - 如何在 List<string> 中获取不区分大小写的匹配项?

.net - MS 团队应用程序 : There was a problem reaching this app

c# - 从依赖于另一个注册元素的 ServiceStack 的 IoC 容器解析

c# - Form_Load 事件中的混淆

.net - 使用 .NET 将图像转换为 WMF?

带有可选组的正则表达式

排除前缀和后缀的正则表达式