用于提取要匹配的某些部分的正则表达式
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 行添加到问题帖子中,我们应该能够看到原因。以上是关于用于提取要匹配的某些部分的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章