如何获取最后不包含单词的所有字符串?

时间:2018-02-20 11:08:38

标签: regex python-3.x

我有3个字符串:

'Table 1.1 - JDH'
'Table 2.3.4 - continued'
'Table 1.1 - Blahblahblah'

我需要通过 findall()只捕获2个字符串:

[('Table 1.1', ' - JDH)]
[('Table 1.1', ' - Blahblahblah)]

我在Python 3中的正则表达式是:

'(Table [\.\d]+)^(.+continued)'

但它不起作用,告诉我它是怎么回事?

3 个答案:

答案 0 :(得分:1)

模式^(.+continued)与您想要的不匹配,^是行锚的开头,并且在此时将失败。你需要 而是((?!.*continued$).+)。与.+匹配的断言并不以continue结尾。

答案 1 :(得分:0)

您可以使用

^(?!.*continued$).+

<小时/> 那是

^                 # start of line
(?!.*continued$)  # neg. lookahead
.+                # match 1+ characters

a demo on regex101.com

<小时/> 在Python

import re

strings = ['Table 1.1 - JDH', 'Table 2.3.4 - continued', 'Table 1.1 - Blahblahblah']

rx = re.compile(r'^(?!.*continued$).+')

filtered = [string for string in strings if rx.search(string)]
print(filtered)

答案 2 :(得分:0)

使用endswith

a = ['Table 1.1 - JDH', 'Table 2.3.4 - continued', 'Table 1.1 - Blahblahblah']
for i in a:
    if not i.endswith("continued"):
        print(i)

<强>输出:

Table 1.1 - JDH
Table 1.1 - Blahblahblah