如何在正则表达式匹配之前获取前一个文本?

时间:2017-09-19 13:02:52

标签: c# regex

我很难在正则表达式匹配之前获取文本。这是我的输入文本,例如:

Tytuł Płatnosci: FK 1048388520 F 1048393748
Kontr. : AUTO-BLAK SP. Z O. O.
FARBIARSKA 25A
WARSZAWA
Nr Banku: 17501123 RAIFF Centrum Operacyjne
Nr Rachunku: 06175000090000000010263654
Data Stempla 170906
Kwota Przekazu: 88.30 PLN
Info Code; 0003677116
06.09.17 PRZELEW PRZYCHODZACY 06.09.17 100.00
Referencje : PL0INE117249DJ20
Nr Ref: 4249174665
Tytuł Płatnosci: faktura vat 1048399482
Kontr. : FIRMA HANDLOWA TOP-ZOO

我的搜索字符串是:Kontr。 :FIRMA HANDLOWA TOP-ZOO 我必须在它之前得到它的字符串:TytułPłatnosci:faktura vat 1048399482

我没有代码,因为我正在使用带有正则表达式组件的自动化软件。

我尝试了这种模式:

((.*\n){1})Kontr. : FIRMA HANDLOWA TOP-ZOO

然而,它没有返回我想要的输出,它返回另一个带有“Tytul”,我只想在Kontr之前返回文本。 :FIRMA HANDLOWA TOP-ZOO而不是其他文本。

希望你能帮助我。谢谢

1 个答案:

答案 0 :(得分:1)

由于您无法访问代码,因此您只需要一个正则表达式解决方案。使用积极的前瞻:

(?-s).+(?=[\r\n]+Kontr\. : FIRMA HANDLOWA TOP-ZOO)
       ^^^                                       ^   

[^\r\n]+(?=[\r\n]+Kontr\. : FIRMA HANDLOWA TOP-ZOO)

请参阅regex demo

<强>详情

  • (?-s) - 关闭单线模式(当.与换行符号匹配时)
  • .+ - 除换行之外的任何1个或多个字符,尽可能多(我怀疑你有兴趣提取空字符串,因此,我使用+量词,如果你感兴趣的话如果该行为空,请使用.*代替)(注意:如果您想避免匹配尾随CR符号,请将.替换为[^\r\n]
  • (?=[\r\n]+Kontr\. : FIRMA HANDLOWA TOP-ZOO) - 一个积极的前瞻,要求其模式立即与当前位置的右侧匹配:
    • [\r\n]+ - 一个或多个CR和/或LF符号
    • Kontr\. : FIRMA HANDLOWA TOP-ZOO - Kontr. : FIRMA HANDLOWA TOP-ZOO子字符串。