在与这个问题斗争了一周后,我需要这一模式的帮助:

"^(?<Id>\d+) - (?<Agent>.*)(?<Registry>\(S (.*)\))+?. \((?<Date>\d{2}[/]\d{2}[/]\d{4})\).?$"

我的https://regex101.com/测试:

case 1:

121971-我的文本(S 8,H M 42670).(27/06/1974)

Match 1 0-46 121971-我的文本(S 8,H M 42670).(27/06/1974)
Group 1 19-31 8, H M 42670
Group Id 0-6 121971
Group Agent 9-16 my text
Group Registry 16-32 (S 8, H M 42670)
Group Date 35-45 27/06/1974

case 2:

2-Lorem Ipsum.(19/12/2022).

regex101返回"正则表达式与主题字符串不匹配"

我删除了组"(?(S(.*))?"的最后一个+. case 1将代理和注册表加入同一组. case 2返回:

Match 1 0-30 2-Lorem Ipsum.(19/12/2022).
Group Id 0-1 2
Group Agent 4-15 Lorem Ipsum
Group Date 18-28 19/12/2022

这是预期输出:

Group Case 1 Case 2
Id 121971 2
Agent my text Lorem Ipsum
Registry S 8, H M 42670 [null]
Date 27/06/1974 19/12/2022

谢谢

推荐答案

您可以使用

^(?<Id>\d+) - (?<Agent>.*?)(?:\((?<Registry>[^()]*)\))?\W*\((?<Date>\d{2}/\d{2}/\d{4})\)$

参见regex demo.如果在末尾有.?个字符来匹配可选的CR字符,那么可以只使用\r?(如果用RegexOptions.Multiline选项编译模式).

Details:

  • ^(?<Id>\d+)-组"Id":一个或多个数字
  • --由单个规则空格括起的连字符
  • (?<Agent>.*?)-组"代理":除换行符以外的任何零个或多个字符,尽可能少
  • (?:\((?<Registry>[^()]*)\))? - an optional group matching
    • \(-(字符
    • (?<Registry>[^()]*)-组"注册表":除)(之外的任何零个或更多字符
    • \)-)字符
  • \W*-零个或更多非文字字符
  • \(-(字符
  • (?<Date>\d{2}/\d{2}/\d{4})-组"日期":两位数、/、两位数、/和四位数
  • \)-)字符
  • $-字符串结束.

Csharp相关问答推荐

如何阻止注释被包含在C#release build. exe中

C++/C#HostFXR通过std::tuple传递参数

在实时数据库中匹配两个玩家的问题

如何定义EFCore中的多个穿透

Blazor WebApp:原始异常:AADSTS700025:客户端是公共的,因此既不应显示客户端,也不应显示客户端

如何解决提交按钮后 Select 选项错误空参照异常

为什么在使用动态obj+类obj时会调用串联?

当前的文化决定了错误的文化

Regex字母数字校验

HttpClient SendAsync与多线程环境中的ArchiveZip

在C#中,是否有与变量DISARD对应的C++类似功能?

WinUI 3中DoubleCollection崩溃应用程序类型的依赖属性

C#命名管道-编码错误?

Autofac -动态实例化:手动传递构造函数

使DefaultIfEmpty返回空

当要删除的子模型没有父模型的1:多属性时,如何告诉实体框架设置1:1 FK条目?

组件';EditForm';使用与包含子内容元素';授权';相同的参数名称(';上下文';)

Blazor检测Foreach循环内SELECT元素的更改

解决使用延迟加载注入间接服务的问题

更改选项卡页面图标 colored颜色