Совпадение одинарных кавычек из Python Re - PullRequest
3 голосов
/ 03 апреля 2012

Как сопоставить следующее я хочу, чтобы все имена были в одинарных кавычках

This hasn't been much that much of a twist and turn's to 'Tom','Harry' and u know who..yes its 'rock'

Как извлечь имя только в одинарных кавычках

name = re.compile(r'^\'+\w+\'')

Ответы [ 4 ]

7 голосов
/ 03 апреля 2012

Следующее регулярное выражение находит все отдельные слова, заключенные в кавычки:

In [6]: re.findall(r"'(\w+)'", s)
Out[6]: ['Tom', 'Harry', 'rock']

Здесь:

  • ' соответствует одной кавычке;
  • the\w+ соответствует одному или нескольким символам слова;
  • ' соответствует одиночной кавычке;
  • круглые скобки образуют группу захвата : они определяют частьсовпадение, которое возвращается findall().

Если вы хотите найти только слова, начинающиеся с заглавной буквы, регулярное выражение можно изменить следующим образом:

In [7]: re.findall(r"'([A-Z]\w*)'", s)
Out[7]: ['Tom', 'Harry']
3 голосов
/ 03 апреля 2012

Я бы предложил

r = re.compile(r"\B'\w+'\B")
apos = r.findall("This hasn't been much that much of a twist and turn's to 'Tom','Harry' and u know who..yes its 'rock'")

Результат:

>>> apos
["'Tom'", "'Harry'", "'rock'"]

«Отрицательные границы слова» (\B) предотвращают совпадения, такие как 'n' в словах, подобных Rock'n'Roll.

Пояснение:

\B  # make sure that we're not at a word boundary
'   # match a quote
\w+ # match one or more alphanumeric characters
'   # match a quote
\B  # make sure that we're not at a word boundary
1 голос
/ 03 апреля 2012

^ (среди прочих имен 'hat' или 'caret') в регулярном выражении означает "начало строки" (или, с учетом определенных параметров, "начало строки"), которое вас не волнует,Отказ от этого заставляет ваше регулярное выражение работать нормально:

>>> re.findall(r'\'+\w+\'', s)
["'Tom'", "'Harry'", "'rock'"]

Регулярные выражения, предложенные другими, могут быть лучше для того, чего вы пытаетесь достичь, это минимальное изменение для решения вашей проблемы.

0 голосов
/ 03 апреля 2012

Ваше регулярное выражение может соответствовать только шаблону после начала строки.Попробуйте что-то вроде: r"'([^']*)'"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...