用于提取要匹配的某些部分的正则表达式

Posted

技术标签:

【中文标题】用于提取要匹配的某些部分的正则表达式【英文标题】:Regex for extracting certain part to be match 【发布时间】:2021-07-12 20:27:56 【问题描述】:

我正在尝试使用正则表达式从字符串中提取某些数据。字符串如下所示:

这里有一些描述点

经验

公司名称

1 年 4 个月

软件开发人员

2020 年 4 月 - 至今(1 年 1 个月)

城市名称、州名称、国家名称

这里有一些描述点

StringBuilder sb = new StringBuilder();    
string pdfData = string.Empty, pdfData2 = string.Empty;

Regex re = new Regex(regexPattern, RegexOptions.IgnoreCase);

using (PdfReader reader = new PdfReader(path))

    for (int pageNo = 1; pageNo <= reader.NumberOfPages; pageNo++)
    
        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
        pdfData += PdfTextExtractor.GetTextFromPage(reader, pageNo, strategy);
        Match match = re.Match(pdfData);
        if (match.Success)
        
            pdfData2 += match.Value;
        
    

我想提取与此正则表达式模式匹配的公司名称、持续时间(1 年 4 个月)和名称(软件开发人员)(2020 年 4 月 - 现在(1 年 1 个月))。当这个模式匹配时,我想得到这个模式之前的三行。

我试过string regex Pattern = @"[ADFJMNOS][a-z]2,8\s[12][0-9]3\b";。这让我只有 2020 年 4 月

【问题讨论】:

您的模式不包含任何可以匹配之前行的内容,因此“April 2020”似乎是正确的匹配。在这个模式之前你有什么尝试得到这三行? @ChristophLütjen 我不知道如何创建这样的正则表达式模式,让我在模式之前获得那三行 与您的正则表达式问题本身无关,但请记住,SimpleTextExtractionStrategy 按其在 PDF 内容流中出现的顺序提取内容,这不一定与它出现的顺序相同在页面上。 所以你问“如何在我的正则表达式中包含换行符”?这个应该有帮助:***.com/questions/1175053/… 【参考方案1】:

我想在这个模式之前得到三行。

我试过string regex Pattern = @"[ADFJMNOS][a-z]2,8\s[12][0-9]3\b";

如果您在模式字符串的开头插入((.*\n)3)match.Groups[1] 将在此模式之前包含所需的三行

【讨论】:

谢谢 Armali 它解决了我的问题,但是这个 ragex 模式在 2020 年 1 月不起作用,为什么? 它在 2020 年 1 月工作 - 所以似乎还有别的东西,也许月份和年份之间有两个空格? - 您可以轻松地在线测试它,例如这里:regex101.com @Dev.Sab - 如果您将 not working 行添加到问题帖子中,我们应该能够看到原因。

以上是关于用于提取要匹配的某些部分的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式实战

有关正则表达式的学习

Python基础篇:认知正则表达式

Python基础篇:认知正则表达式

Python100天学习笔记Day12 正则表达式

Python100天学习笔记Day12 正则表达式