gpt4 book ai didi

c# - .NET 正则表达式在带有所有格量词的可选文本之间匹配数字不起作用

转载 作者:行者123 更新时间:2023-12-03 22:58:14 25 4
gpt4 key购买 nike

我有这个正则表达式:

Regex myRegex = new Regex(@"^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*+$");

我想这样匹配数字代码:

  • “订单号 0123456 lorem ipsum” - 第 1 组中的 MATCH 0123456
  • “编号 0123456” - 第 1 组中的比赛 0123456
  • “订单 0123456” - 第 1 组中的 MATCH 0123456
  • “013456 lorem ipsum” - 不匹配

这在这里有效:https://regex101.com/但在使用 C# 的 .NET 中则不然,因为我有以下异常(exception):

"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)"

有没有一种可能更优雅的替代方法来捕获文本之间的数字(数字之前强制,之后可选)。

谢谢。

最佳答案

*+ 是所有格量词,.NET 正则表达式不支持它们。将 *+ 替换为 *,因为您并不想在此处使用所有格量词。

这是映射:

?+     => ?
*+ => *
++ => +
{2}+ => {2}
{2,}+ => {2,}
{2,9}+ => {2,9}

使用

^[a-zA-Z .:_-]+([0-9]+)[a-zA-Z .:_-]*$

参见 .NET regex demo

enter image description here

此处可以使用替代正则表达式,它将匹配 OrderNo.,然后是 0+ 空格,然后将捕获 1+ 数字:

(?:Order|No\.)\s*([0-9]+)

参见 another regex demo

关于c# - .NET 正则表达式在带有所有格量词的可选文本之间匹配数字不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42775136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com