如何匹配以下内容我希望所有名称都用单引号
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+\'')
答案 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"'([^']*)'"