我有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)'
但它不起作用,告诉我它是怎么回事?
答案 0 :(得分:1)
模式^(.+continued)
与您想要的不匹配,^
是行锚的开头,并且在此时将失败。你需要
而是((?!.*continued$).+)
。与.+
匹配的断言并不以continue
结尾。
答案 1 :(得分:0)
您可以使用
^(?!.*continued$).+
<小时/> 那是
^ # start of line
(?!.*continued$) # neg. lookahead
.+ # match 1+ characters
<小时/>
在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