Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式:仅当撇号放在字母中时,而不是作为引号_Python_Regex - Fatal编程技术网

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]*