C# .NET正则表达式在具有所有格量词的可选文本之间匹配数字无效
我有一个正则表达式:C# .NET正则表达式在具有所有格量词的可选文本之间匹配数字无效,c#,.net,regex,C#,.net,Regex,我有一个正则表达式: Regex myRegex = new Regex(@"^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*+$"); 我想用这种方式匹配一个数字代码: “订单号0123456 lorem ipsum”-与第1组中的0123456匹配 “编号0123456”-匹配第1组中的0123456 “订单0123456”-匹配第1组中的0123456 “013456 lorem ipsum”-不匹配 这在这里起作用: 但在使用C#的.NET中没有,因为我有
Regex myRegex = new Regex(@"^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*+$");
我想用这种方式匹配一个数字代码:
- “订单号0123456 lorem ipsum”-与第1组中的0123456匹配
- “编号0123456”-匹配第1组中的0123456
- “订单0123456”-匹配第1组中的0123456
- “013456 lorem ipsum”-不匹配
"System.ArgumentException: parsing "^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*+$" - Nested quantifier +.
at System.Text.RegularExpressions.RegexParser.ScanRegex()
at System.Text.RegularExpressions.RegexParser.Parse(String re, RegexOptions op)
at System.Text.RegularExpressions.Regex..ctor(String pattern, RegexOptions options, TimeSpan matchTimeout, Boolean useCache)
at System.Text.RegularExpressions.Regex..ctor(String pattern)
at Rextester.Program.AnalyzeFreetext(String freeText)
at Rextester.Program.Main(String[] args)"
是否有另一种可能更优雅的方式来捕获文本之间的数字(数字前必须,数字后可选)
谢谢。您可以使用以下正则表达式,它强制执行数字之前的任何其他内容,然后捕获数字:
\D+(\d+)
详情见下文
\D
表示除数字以外的任何内容+
至少一次\d
仅限数字+
至少一次
欢迎在评论中提问。
*+
是所有格量词,而.NET正则表达式不支持它们。将*+
替换为*
,因为您无意在此处使用所有格量词
以下是映射:
?+ => ?
*+ => *
++ => +
{2}+ => {2}
{2,}+ => {2,}
{2,9}+ => {2,9}
使用
看
这里可以使用另一个正则表达式,它将匹配顺序
或编号
,然后是0+空格,然后将捕获1+位数:
(?:Order|No\.)\s*([0-9]+)
请参见
*+
是所有格量词,而.NET正则表达式不支持它们。替换为*
。
(?:Order|No\.)\s*([0-9]+)