re.findall(pattern, string, flags=0)
Return all non-overlapping matches of pattern in string, as a list of strings.
The string is scanned left-to-right, and matches are returned in the order found.
concertation
|
c
concertation
|
# o is not present in the character class. Matching ends here. Adds match, 'c' to ouput list
concertation
|
n
concertation
|
c
concertation
|
# Match ends again. Adds match 'nc' to list
# And so on
您可以使用正则表达式,在^{} module 中实现
更好的解决方案
[bcdfghjklmnprstvyz]+
匹配字符类中一个或多个字符的任意序列re.IGNORECASE
对字符启用区分大小写匹配。那就是另一个解决方案
[^aeiou]
字符类被否定。匹配除此字符类中的字符以外的任何字符。简而言之就是匹配字符串中的辅音+
量子化器+
匹配字符串中出现的一个或多个模式注意这也会在解决方案中找到非字母的相邻字符。因为字符类是除了元音以外的任何东西
示例
如果您确定输入始终包含字母表,则此解决方案是可以的
如果你想知道结果是如何得到的
re.findall(r'[bcdfghjklmnpqrstvwxyz]+', "concertation")
可以使用正则表达式和
re
模块的split
函数来完成此操作:此方法在匹配一个或多个连续元音时拆分字符串。在
解释正则表达式}表示该类中任何字符的一个或多个匹配。因此,字符串}处拆分。在
"[aeiou]+"
:这里元音被收集到一个类[aeiou]
,而{"concertation"
在o
、e
、a
和{re.I
标志意味着将忽略字母的大小写,从而有效地使字符类等于[aAeEiIoOuU]
。在编辑:需要记住的一点是,这种方法隐含地假设单词只包含元音和辅音。数字和标点符号将被视为非元音/辅音。要只匹配连续的辅音,请使用
re.findall
与character类中列出的辅音(如其他答案中所述)。在键入所有辅音的一个有用的快捷方式是使用第三方^{} 模块而不是{}。在
本模块支持set运算,因此包含辅音的字符类可以整洁地写成整个字母表减去元音:
^{pr2}$其中}是元音。在
[a-z]
是整个字母表,--
是集差,而{如果您想要一个非regex解决方案,
itertools.groupby
在这里可以很好地工作,就像这样相关问题 更多 >
编程相关推荐