【问题标题】:Regex to extract string between digit pattern and colon or newline正则表达式提取数字模式和冒号或换行符之间的字符串
【发布时间】:2020-08-11 06:48:58
【问题描述】:

我必须在数字模式和冒号或换行符之间提取字符串(第一次出现)

我的字符串看起来像:

05-30-1306-29-13 建筑商风险:
限额/免赔额:

我想提取 BUILDERS RISK。可能有也可能没有冒号,在这种情况下,我们会将换行符视为终止模式

这是我到目前为止的想法

\d{2}-\d{2}-\d{4}-\d{2}-\d{2}\s*\W+[^:|\n]+:\s*

数字模式始终是 2-2-4-2 后跟任意字符串,后跟 \n 或 :

到目前为止,正则表达式得到了我需要的东西,但我不知道如何将它分成不同的匹配,所以我可以进行第二场匹配

第一次匹配 - 数字模式

第二场比赛 - 我需要什么

第 3 次匹配 - 冒号或换行符

任何指针都会有所帮助。

更新:要搜索的文本词的几个替代项可能是这样的

11-06-1212-29-12 住宅火灾 (DP-3):年租金

11-05-1212-26-12 房主 (HO-3):第二居所

我只想要冒号之前的任何内容,或者如果不存在,则取字符串直到找到换行符。附带说明一下,重要的文本可能不会出现在同一行中,而是出现在下一行,但在同一行中总是跟在冒号或换行符之后。

PS:提取的文本不应包含冒号

【问题讨论】:

    标签: c# regex regex-greedy


    【解决方案1】:

    看来你可以使用

    \b(\d{2}-\d{2}-\d{4}-\d{2}-\d{2})\W+(.*?)(:?\r?\n\s*)
    

    查看regex demo 产量

    详情

    • \b - 单词边界(如果数字可以粘贴到字母或下划线,则更改为 (?<!\d)
    • (\d{2}-\d{2}-\d{4}-\d{2}-\d{2}) - 第 1 组:两位,-,两位,-,四位,-,两位,-,两位
    • \W+ - 1+ 个非单词字符(要保持在线状态,请替换为 [^\w\r\n]+
    • (.*?) - 第 2 组:除换行符以外的任何零个或多个字符,尽可能少
    • (:?\r?\n\s*) - 第 3 组:可选的 :、可选的 CR、LF 符号,然后是任何 0+ 空白字符。

    【讨论】:

    • 我想你也可以做一个非捕获组,但我也认为 OP 要求第二组是有趣的位 - 不过很好的 RegExFu
    • @Charleh 我了解 OP 需要 3 个组,并且我的正则表达式捕获 3 个必需的子字符串、1) 数字、2) BUILDERS RISK 和 3) 冒号(如果有的话)和后面带有任何空格的换行符。
    • 是的,只是说-所有问题都可以解释,听起来他们实际上并不需要其他组,只是第二组(也许他们不知道非捕获组?),但这仍然给了他们他们需要的东西。只是一个观察 - 我可能会叫错树
    • @Charleh 在这种情况下,OP 不妨使用(?<=\b\d{2}-\d{2}-\d{4}-\d{2}-\d{2}[^\w\r\n]+)[^\r\n:]+ (demo)
    • @user869375 那么,\b(\d{2}-\d{2}-\d{4}-\d{2}-\d{2})\W+([^:\r\n]*)(:|.*)?见demo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多