re regex找到上半场,但保持下半场线

时间:2014-10-08 09:43:44

标签: python regex

伙计们,在试图搜索这个问题时尽力而为,因为我觉得简单描述很奇怪......

我试图从银行对账单中删除不必要的文本,例如:

source: TFR 09343-9724 to their bank-Client Company Invoice 238923
output: Client Company Invoice 238923

我认为最简单的方法是搜索" TFR 09343-9724到他们的银行 - "和垃圾,保持其余部分。我不能将其设置为搜索模式,因为客户端引用会发生变化...虽然回想起来我觉得正则表达式可以很容易地处理更改的发票号...

我现在看看自己能否做到这一点,但我仍然很好奇我将如何使用" re"实现我原来的想法。

2 个答案:

答案 0 :(得分:1)

使用以下正则表达式并通过re.sub函数

删除匹配的字符串
TFR 09343-9724.*?bank-

DEMO

>>> import re
>>> m = re.sub(r'TFR 09343-9724.*?bank-', r'', 'TFR 09343-9724 to their bank-Client Company Invoice 238923')
>>> m
'Client Company Invoice 238923'

OR

如果您不知道TFR

之后的数字,请使用以下正则表达式
>>> m = re.sub(r'\bTFR \d+-\d+\b.*?bank-', r'', 'TFR 09343-9724 to their bank-Client Company Invoice 238923')
>>> m
'Client Company Invoice 238923'

答案 1 :(得分:1)

您可以只捕获相关行的其余部分:

>>> import re
>>> s = """some first line
some other line
TFR 09343-9724 to their bank-Client Company Invoice 238923
a final line"""
>>> re.search(r"^TFR \d{5}-\d{4}.*-(.*)$", s, re.MULTILINE).groups()
('Client Company Invoice 238923',)

请注意第二个.*周围的括号,然后是行尾字符$ - 这意味着"捕获其余行中的所有内容" (见demo and full explanation here)。