#python #regex
Вопрос:
Я хотел бы выполнить поиск в строке определенных подстрок и сохранить эти подстроки в списке с помощью re, как бы я это сделал?
Вот мой код до сих пор:
#!/usr/bin/env python
from sys import stdin
import re as reg
regex = reg.compile(r"".*"")#match " match me "
line = stdin.readline().strip().split()
myList = [ match for match in regex.finditer(line) ]
print myList
Вот пример ввода:
"RUn.exe O" "" " 2ne, " two! . " "
Это ожидаемый результат, не нужно добавлять скобки, это было просто мое уточнение конкретных необходимых совпадений:
<RUn.exe O>
<>
< 2ne, >
<two!>
<.>
< >
Таким образом, в принципе, все, что находится между кавычками, является частью вывода и должно быть записано в список, а все, что без кавычек, должно быть просто записано в список
Спасибо, ребята
P.S. где я могу узнать об использовании регулярных выражений в python? Мне удобно использовать регулярное выражение с grep или awk, но я все еще новичок в python, и мне особенно нравится идея компиляции регулярного выражения, которое будет использоваться снова и снова, но я не знаю, где узнать об этом больше
Комментарии:
1. Ваш вопрос неясен. Не могли бы вы добавить примеры входных данных и желаемых выходных данных?
2. Срри насчет этого, я очень устал после публикации этого, поэтому у меня не было времени добавить примеры, прежде чем я отправлюсь в путь. Теперь я добавил пример ввода/вывода. Спасибо, что посмотрели
Ответ №1:
Я думаю, что это то, что вы ищете, хотя, возможно, вы сможете обойтись без цикла for…
line = '"RUn.exe O" "" " 2ne, " two! . " "'
import re
regex = re.compile(r'"[^"]*"|[^s] ')
matches = [el.strip('"') for el in regex.findall(line)]
print 'n'.join(matches)
Вы можете использовать как», так и » для создания строки в python. Поскольку я создаю строку с помощью ‘, строка не заканчивается при встрече с «, и мне не нужно ее избегать. Если вы создаете строку, содержащую либо», либо», удобно использовать другую в качестве начала/остановки.
Регулярное выражение работает следующим образом: сначала найдите «. [^»] означает все, что не является (^) a», и соответствует любому числу этого (*). Тогда найди другого «. Аналогично, [^s] означает все, что не является пробелом, а означает один или несколько.
В документации re может быть подсказка: http://docs.python.org/2.7/library/re.html#match-objects
Комментарии:
1. Srry Раньше я не был очень ясен, теперь я прояснил некоторые детали. Регулярное выражение, которое я создал, не всегда соответствует тому, что мне нужно, поэтому то, которое вы опубликовали, тоже не будет работать. Хотя спасибо за ответ
2. Не могли бы вы объяснить, пожалуйста, что делает это регулярное выражение? Как он сопоставляет кавычки без необходимости их экранировать (»)? И можете ли вы объяснить, почему первая скобка [^»] не соответствует буквально, хотя она сопровождается цитатой. Разве «s» не соответствует только пробелам? И что такое * соответствие? Ваше решение сработало очень хорошо, но я не знаю, как и почему оно работает.