Python正则表达式:仅当撇号放在字母中时,而不是作为引号
将每个单词定义为字母字符(或字母)的最长连续序列,如果撇号夹在两个字母之间,则最多包括一个撇号Python正则表达式:仅当撇号放在字母中时,而不是作为引号,python,regex,Python,Regex,将每个单词定义为字母字符(或字母)的最长连续序列,如果撇号夹在两个字母之间,则最多包括一个撇号 [a-z]+[a-z/'?a-z]*[a-z$] 它与字母“a”不匹配 这样的方法应该行得通 [a-zA-Z]*(?:[a-zA-Z]\'[a-zA-Z]|[a-zA-Z])[a-zA-Z]* 匹配0个或多个字母[a-zA-Z]*?,后跟一个由2个字母包围的撇号或一个字母(?:[a-zA-Z]\'[a-zA-Z]|[a-zA-Z])然后匹配0个或多个字母[a-zA-Z]* 仅适用于小写字母 [a-
[a-z]+[a-z/'?a-z]*[a-z$]
它与字母“a”不匹配 这样的方法应该行得通
[a-zA-Z]*(?:[a-zA-Z]\'[a-zA-Z]|[a-zA-Z])[a-zA-Z]*
匹配0个或多个字母[a-zA-Z]*?
,后跟一个由2个字母包围的撇号或一个字母(?:[a-zA-Z]\'[a-zA-Z]|[a-zA-Z])
然后匹配0个或多个字母[a-zA-Z]*
仅适用于小写字母
[a-z]*(?:[a-z]\'[a-z]|[a-z])[a-z]*
我会使用:
^(?:[a-z]+|[a-z]+'[a-z]+)$
带有re.IGNORECASE
您似乎误解了字符类表示法。
[
和]
之间的内容是要匹配的字符列表。多次列出同一个字符是没有意义的,基本上除了]
和-
(以及首字母^
表示否定)之外的所有字符都只是匹配它们自己,即失去它们的正则表达式特殊含义
让我们重新表述您的要求。您需要一个字母[a-z]
重复一次或多次+
,可以选择后跟撇号和另一个字母序列
[a-z]+('[a-z]+)?
在某些正则表达式方言中,您可能更喜欢非捕获的左括号
(?:
而不是普通的(
您有预期返回的示例数据吗?您也只允许小写字母吗?我想您正在寻找[a-z]+[a-z/”?a-z]*([a-z]|$)
?在您的代码片段中,括号中的$
被解释为与文本$
字符相匹配。顺便说一下,请检查正则表达式测试和调试。谢谢。我一直使用pythex.org。是的,字符串已经是小写的。不幸的是,[a-z]+[a-z/'?a-z]*([a-z]|$)不起作用,因为它与单字母单词“a”不匹配。不幸的是,当使用测试/调试网站pythex.org时,它表明您构建的程序与单词“I'm”中的撇号不匹配@user12916679更新了答案以处理小写和大写字母。hanks,输入是一个带有小写字母的字符串。尽管如此,还是很感激。@user12916679经过一番尝试后,我想我找到了它working@user12916679对于小写字母,它稍微短一点[a-z]*(?:[a-z]\'[a-z]|[a-z])[a-z]*