#python #regex #whitespace
#python #регулярное выражение #пробел
Вопрос:
Учитывая фразу в данной строке, мне нужно иметь возможность сопоставлять эту фразу, даже если в словах разное количество пробелов в строке.
Таким образом, если фраза является "the quick brown fox"
, а строка является "the quick brown fox jumped over the lazy dog"
, экземпляр "the quick brown fox"
все равно должен быть сопоставлен.
Метод, который я уже пробовал, заключался в замене всех экземпляров пробелов в строке шаблоном регулярного выражения для пробелов, но это не всегда работает, если строка содержит символы, которые не обрабатываются регулярным выражением как буквальные.
Комментарии:
1. Чтобы уточнить, программа, в которой это будет реализовано, предназначена для обработки произвольно большого количества строк, поэтому мне нужно иметь возможность сопоставлять шаблон с любой строкой и серией слов, которые появляются в этой строке.
2. Пожалуйста, добавьте больше примеров данных. Если вы показываете только одну строку, мы не можем увидеть более широкий шаблон.
Ответ №1:
Это должно сработать:
import re
pattern = r'thes quicks browns fox'
text = 'the quick brown fox jumped over the lazy dog'
match = re.match(pattern, text)
print(match.group(0))
Результат таков:
the quick brown fox
Комментарии:
1. Спасибо за ваш ответ. Есть ли способ обобщить это решение, чтобы мне не приходилось вручную создавать шаблон регулярного выражения для каждой строки? Программа, над которой я работаю, выполняет итерации по многим строкам.
Ответ №2:
Вы можете использовать это регулярное выражение. Проверьте здесь
(thes quicks browns fox)
Комментарии:
1. Спасибо за ваш ответ. Возможно, я был недостаточно конкретен, но там больше одной строки, поэтому решение должно быть применимо к любой строке.
2. Более одной строки. Это одинаковые предложения?
3. Строка и фраза каждый раз разные.
4. Можете ли вы привести пример еще 3-5 фраз? Таким образом, мы можем распознать шаблон. Вы хотите получить первые 4 слова в каждой фразе?
Ответ №3:
Вы можете разделить заданную строку пробелами и соединить их обратно с помощью пробела, чтобы затем сравнить ее с искомой фразой:
s = "the quick brown fox"
' '.join(s.split()) == "the quick brown fox" # returns True
Ответ №4:
для общего случая:
- замените каждую последовательность символов пробела только одним символом пробела.
-
проверьте, является ли данное предложение подстрокой строки после замены
import re pattern = "your pattern" for line in lines: line_without_spaces= re.sub(r's ', ' ', line) # will replace multiple spaces with one space return pattern in line_without_spaces
Ответ №5:
Как вы позже пояснили, вам нужно было сопоставить любую строку и серию слов. Для достижения этой цели я добавил еще несколько примеров, чтобы прояснить, что делают оба предложенных похожих регулярных выражения:
text = """the quick brown fox
another line with single and multiple spaces
some other instance with six words"""
Сопоставление целых строк
Первое соответствует всей строке, повторяя отдельные строки
pattern1 = re.compile(r'((?:w )(?:s |$)) ')
for i, line in enumerate(text.split('n')):
match = re.match(pattern1, line)
print(i, match.group(0))
Его вывод:
0 the quick brown fox
1 another line with single and multiple spaces
2 some other instance with six words
Сопоставление целых строк
Второе сопоставляет отдельные слова и повторяет их одно за другим, повторяя отдельные строки:
pattern2 = re.compile(r'(w )(?:s |$)')
for i, line in enumerate(text.split('n')):
for m in re.finditer(pattern2, line):
print(m.group(1))
print()
Его вывод:
the
quick
brown
fox
another
line
with
single
and
multiple
spaces
some
other
instance
with
six
words