我有这个正则表达式:
Regex myRegex = new Regex(@"^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*+$");
我希望以这种方式匹配数字代码:
这可以在这里工作:https://regex101.com/ 但是在.NET中没有C#,因为我有这个例外:
"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)"
是否有另一种可能更优雅的方法来捕捉文本之间的数字(在数字之前是强制性的,在之后是可选的)。
谢谢。
答案 0 :(得分:4)
*+
是占有量词,.NET正则表达式不支持它们。替换为*
。
使用
^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*$
请参阅.NET regex demo。
这里可以使用替代正则表达式,它将匹配Order
或No.
,然后匹配0+空格,然后将捕获1+个数字:
(?:Order|No\.)\s*([0-9]+)
答案 1 :(得分:1)
您可以使用以下Regex强制执行数字之前的任何其他内容,然后捕获数字:
\D+(\d+)
请参阅以下详细信息。
\D
表示除了数字之外的任何其他内容
+
至少1次
仅\d
个数字
+
至少一次
随意在评论中提问。