【问题标题】: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 内容流中出现的顺序提取内容,这不一定与它出现的顺序相同在页面上。
  • 所以你问“如何在我的正则表达式中包含换行符”?这个应该有帮助:stackoverflow.com/questions/1175053/…

标签: c# regex asp.net-mvc itext


【解决方案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 行添加到问题帖子中,我们应该能够看到原因。
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2012-10-22
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多