C# 正则表达式 "+"组返回空字符串

标签 c# regex

我正在尝试匹配以下字符串并提取数字:

"Control 1"
"Control 2"

并且我想确保避免使用类似的字符串,例如:

"Indication 1"
"Local Control Input 2"

这是我正在使用的模式:

@"^Control (?<slot>\d+)$"

它运行完美,match.Groups["slot"].Value 返回数字。但是,我发现我还需要能够匹配以下内容:

"Office In 1"
"Office In 2"

我将正则表达式修改为:

@"^(?:Control)|(?:Office In) (?<slot>\d+)$"

问题是现在,match.Groups["slot"].Value 返回一个空字符串! + 不要求至少有一个数字吗?我随机尝试在两个现有的周围添加一个额外的非捕获组:

@"^(?:(?:Control)|(?:Office In)) (?<slot>\d+)$"

这解决了问题,但我不确定原因。

最佳答案

交替在正则表达式中具有最高的优先级。您原来的正则表达式是 "^(?:Control)" (字符串开头的控件)或 "(?:Office In) (?<slot>\d+)$" (Office In #### 在字符串的末尾)。

试试这个正则表达式:

@"^(?:Control|Office In) (?<slot>\d+)$"

关于C# 正则表达式 "+"组返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934499/

相关文章:

javascript - 用 html 按钮替换字符串中的自定义标记

java - 将 String 的 ReplaceAll 与正则表达式一起使用

c# - 在 ASP.NET 网页中枚举字典

c# - 如何在asp.net中查找客户信息

c# - 正则表达式验证 .NET 的非负小数或空白?

Java 正则表达式模式至少包含一个字母

regex - 具有两个值的 Shell 脚本变量赋值(正则表达式)

c# - 如何为我的 C# 应用程序创建产品 key ?

c# - Blazor、ASP.NET Core 托管与 ASP.NET Core 中的服务器端

php - 更改 RegEx 以允许英文和日文字符