У меня есть следующее выражение регулярного выражения
re.findall('\(([0-9].*?)\)', a[a.find('('):].strip())
для строк, таких как
asdasdasd (21345-asdasdasd)
чтобы получить то, что находится внутри скобок, а затем число. Но я также хочу быть в состоянии получить то, что внутри, за которым следует строка "NA", например:
asdasdasd (NA-asdasdasd)
Я пробовал:
re.findall('\(([0-9].*?)\)|\((NA.*?)\)', a[a.find('('):].strip())
но создает кортеж. Как это будет? Заранее спасибо!
Вы можете захватить подстроку между круглыми скобками, когда текст внутри начинается с цифр /NA
за которыми следуют -
и любых других символов, кроме (
и )
используя
re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', a)
См. Демо-версию regex.
подробности
\(
- a (
((?:[0-9]+|NA)-[^)]*)
- Захват группы (это значение будет возвращено re.findall
): (?:[0-9]+|NA)
- 1 или более цифр или NA
-
- дефис[^)]*
- 0+ символы кроме )
\)
- a )
char.См. Демонстрацию Python:
import re
strs = ['asdasdasd (21345-asdasdasd)', 'asdasdasd (NA-asdasdasd)']
for s in strs:
print(re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', s))
Выход:
['21345-asdasdasd']
['NA-asdasdasd']
\((?:\d|NA)[^()]*\)
re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', a)