Я видел несколько связанных сообщений и несколько форумов, чтобы найти ответ на свой вопрос, но ничего не подошло к тому, что мне нужно.
Я пытаюсь использовать переменную вместо жестко закодированных значений в регулярном выражении, которое ищет любое слово в строке.
Однако я могу получить желаемый результат, если не использую переменную.
<http://www.somesite.com/software/sub/a1#Msoffice>
<http://www.somesite.com/software/sub1/a1#vlc>
<http://www.somesite.com/software/sub2/a2#dell>
<http://www.somesite.com/software/sub3/a3#Notepad>
re.search(r"\#Msoffice|#vlc|#Notepad", line)
Это регулярное выражение вернет строку с #Msoffice
ИЛИ #vlc
ИЛИ #Notepad
.
Я попытался определить одну переменную с помощью re.escape, и это сработало абсолютно нормально. Однако я пробовал много комбинаций, используя | и (труба и запятая), но безуспешно.
Могу ли я каким-либо образом указать #Msoffice
, #vlc
и #Notepad
в разных переменных, чтобы позже я мог их изменить?
Заранее спасибо!!
import re
lines = ["<http://www.somesite.com/software/sub/a1#Msoffice>",
"<http://www.somesite.com/software/sub1/a1#vlc>",
"<http://www.somesite.com/software/sub2/a2#dell>",
"<http://www.somesite.com/software/sub3/a3#Notepad>"]
for line in lines:
if re.search(r'\b(?:\#{}|\#{}|\#{})\b'.format('Msoffice', 'vlc', 'Notepad'), line):
print(line)
Выход :
<http://www.somesite.com/software/sub/a1#Msoffice>
<http://www.somesite.com/software/sub1/a1#vlc>
<http://www.somesite.com/software/sub3/a3#Notepad>
Если я правильно понял вас, вы хотели бы вставить переменные в свое регулярное выражение.
На самом деле вы используете необработанную строку с помощью r' '
, чтобы сделать регулярное выражение более читабельным, но если вы используете f' '
, это позволяет вам вставлять любые переменные с помощью {your_var}
, а затем создавать регулярное выражение по своему усмотрению:
var1 = '#Msoffice'
var2 = '#vlc'
var3 = '#Notepad'
re.search(f'{var1}|{var2}|{var3}', line)
Самая раздражающая проблема заключается в том, что вам придется добавить \
к escape-символу, чтобы искать \
, это будет \\
Надеюсь, это помогло