*
- это специальный символ в регулярном выражении, поэтому вы должны избегать его, как указывает @The Fourth Bird. Вы используете необработанную строку, что означает, что вам не нужно экранировать символы при разборе строки на языке Python, но вы все равно должны экранировать ее для механизма регулярных выражений.
r'^REF\*23\*.+~'
или
'^REF\\*23\\*.+~'
# '\\*' -> '\*' by Python string
# '\*' matches '*' literally by regex engine
будет работать. Необходимость избежать вещей дважды приводит к синдрому склонности зубочистки . Использование необработанной строки означает, что вы должны экранировать один раз , "спасая некоторые деревья" в этом отношении.
Дополнительные изменения
Возможно, вы также захотите разбрасывать парень .+
, чтобы соответствовать группе, если вы хотите соответствовать ей. Также измените значение findall
на match
, если вы не ожидаете нескольких совпадений на строку.
results = []
with open(i + fileName, "r") as txtfile:
line = line.rstrip()
p = re.match(r'^REF\*23\*(.+)~', line)
if p:
results.append(int(p.group(1)))
Подумайте об использовании тестера регулярных выражений, такого как этот .