Я хотел бы использовать variable
внутри regex
, как это сделать в Python
?
TEXTO = sys.argv[1]
if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
Я хотел бы использовать variable
внутри regex
, как это сделать в Python
?
TEXTO = sys.argv[1]
if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
Вы должны создать регулярное выражение в виде строки:
TEXTO = sys.argv[1]
my_regex = r"\b(?=\w)" + re.escape(TEXTO) + r"\b(?!\w)"
if re.search(my_regex, subject, re.IGNORECASE):
etc.
Обратите внимание на использование re.escape
, чтобы, если ваш текст имеет специальные символы, они не будут интерпретироваться как таковые.
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE):
Это вставляет то, что находится в TEXTO, в регулярное выражение как строку.
rx = r'\b(?<=\w){0}\b(?!\w)'.format(TEXTO)
Я согласен со всем вышесказанным, если:
sys.argv[1]
было чем-то вроде Chicken\d{2}-\d{2}An\s*important\s*anchor
sys.argv[1] = "Chicken\d{2}-\d{2}An\s*important\s*anchor"
вы не захотите использовать re.escape
, потому что в этом случае вы хотите, чтобы он вел себя как регулярное выражение
TEXTO = sys.argv[1]
if re.search(r"\b(?<=\w)" + TEXTO + "\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
Мне очень удобно создавать шаблон регулярного выражения, набирая несколько меньших паттернов.
import re
string = "begin:id1:tag:middl:id2:tag:id3:end"
re_str1 = r'(?<=(\S{5})):'
re_str2 = r'(id\d+):(?=tag:)'
re_pattern = re.compile(re_str1 + re_str2)
match = re_pattern.findall(string)
print(match)
Вывод:
[('begin', 'id1'), ('middl', 'id2')]
Мне нужно было искать имена пользователей, которые похожи друг на друга, и то, что сказал Нед Батчелдер, было невероятно полезным. Тем не менее, я обнаружил, что у меня был более чистый результат, когда я использовал re.compile для создания моего поискового запроса:
pattern = re.compile(r"("+username+".*):(.*?):(.*?):(.*?):(.*)"
matches = re.findall(pattern, lines)
Выход можно распечатать, используя следующее:
print(matches[1]) # prints one whole matching line (in this case, the first line)
print(matches[1][3]) # prints the fourth character group (established with the parentheses in the regex statement) of the first line.
Вы также можете использовать ключевое слово format для этого метода .Format заменит {} местозаполнителем переменной, которую вы передали методу формата в качестве аргумента.
if re.search(r"\b(?=\w)**{}**\b(?!\w)".**format(TEXTO)**, subject, re.IGNORECASE):
# Successful match**strong text**
else:
# Match attempt failed
Вы можете попробовать другое использование, используя format
GRAMMER сахарным:
re_genre = r'{}'.format(your_variable)
regex_pattern = re.compile(re_genre)