匹配python的单引号

时间:2012-04-03 11:02:07

标签: python

如何匹配以下内容我希望所有名称都用单引号

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 个答案:

答案 0 :(得分:7)

以下正则表达式查找括在引号中的所有单词:

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

下面:

  • '匹配单引号;
  • \w+匹配一个或多个单词字符;
  • '匹配单引号;
  • 括号形成捕获组:它们定义findall()返回的匹配部分。

如果您只希望找到以大写字母开头的单词,可以像这样修改正则表达式:

In [7]: re.findall(r"'([A-Z]\w*)'", s)
Out[7]: ['Tom', 'Harry']

答案 1 :(得分:3)

我建议

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

答案 2 :(得分:1)

正则表达式中的

^('hat'或'caret',以及其他名称)表示“字符串的开头”(或者,给定特定选项,“行的开头”),这不是关心。省略它可以使你的正则表达式正常工作:

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

其他人建议的正则表达可能对你想要达到的目标更好,这是解决问题的最小变化。

答案 3 :(得分:-1)

您的正则表达式只能匹配字符串开头后的模式。尝试类似:r"'([^']*)'"