首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按任意顺序排列的3个所需组的Regex

按任意顺序排列的3个所需组的Regex
EN

Stack Overflow用户
提问于 2022-05-05 03:05:46
回答 1查看 46关注 0票数 0

我有一行文本,我试图分割一个用户输入的注释,它有三个必需的部分--任何长度和内容的注释,已知格式的日期,以及用户的2-4字母首字母。所有部分都是必需的,但我发现在我解析的说明中,用户定期输入所有6种可能的订单:

1/1/21 PB这是一张便条 PB 1/1/21 --这是一个注记 PB这是注1/1/21 1/1/21这是一个注PB 这是注1/1/21 PB 这是注PB 1/1/21。

由于我使用的是.NET,所以我使用了名为capture的组来简化我的生活,因此这三个部分的正则表达式如下所示。正则表达式很长,这是由于某些特定于行业的表示法;可以说,这个组的regex是编写的并且工作得很好。

代码语言:javascript
复制
(?<note>.*?)
(?<initials>[A-Z]{2,4})
(?<date>TBD)

用户还总是在部件之间添加某种可视分隔符,比如我上面使用的空间;[ :-]+涵盖了我发现的所有情况。上面第一个子弹的正则表达式如下所示:

代码语言:javascript
复制
^\w*(?<date>TBD)[ :-]+(?<initials>[A-Z]{2,4})[ :-]+(?<note>.*?)\w*$

分隔符字符是有意从捕获组中删除的。

那么,我该如何写这篇文章,使三个所需的部分中的每一个被匹配,但以任何顺序而不是重复?我相信条件组或查找是解决方案,但我很难找到任何可行的方法。

另外,作为额外的头痛,我注意到像下面这样的注释会引起问题:

不续约- KF 4/1/22

我上面的正则表达式不知道“不更新”是音符,"KF“是首字母,还是"NOT更新- KF”是注释,"DO“是首字母。作为人类,我们看到-分隔符,并知道哪个选项是正确的。因此,如果在不明确的情况下,更喜欢有非空格分隔符char的匹配,那将是令人惊奇的。

EN

回答 1

Stack Overflow用户

发布于 2022-05-05 15:53:33

在C#中,您可以重用命名捕获组,并使用修改来匹配所有表单。

例如,匹配前3行:

代码语言:javascript
复制
^(?:(?<date>\d+/\d+/\d+)[ :-]+(?<initials>[A-Z]{2,4})[ :-]+(?<note>.*)|(?<initials>[A-Z]{2,4})[ :-]+(?<date>\d+/\d+/\d+)[ :-]+(?<note>.*)|(?<initials>[A-Z]{2,4})[ :-]+(?<note>.*?)[ :-]+(?<date>\d+/\d+/\d+))$

看一个regex演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72121467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档