import re
s = 'PythonCookbookListOfContents'
# the first line does not work
print re.split('(?<=[a-z])(?=[A-Z])', s )
# second line works well
print re.sub('(?<=[a-z])(?=[A-Z])', ' ', s)
# it should be ['Python', 'Cookbook', 'List', 'Of', 'Contents']
Run Code Online (Sandbox Code Playgroud)
如何使用Python re从小写字符和大写字符的边框拆分字符串?
为什么第一行无效,而第二行效果不错?
根据re.split:
请注意,拆分永远不会在空模式匹配上拆分字符串.例如:
Run Code Online (Sandbox Code Playgroud)>>> re.split('x*', 'foo') ['foo'] >>> re.split("(?m)^$", "foo\n\nbar\n") ['foo\n\nbar\n']
怎么用re.findall呢?(而不是专注于分隔符,专注于你想要的项目.)
>>> import re
>>> s = 'PythonCookbookListOfContents'
>>> re.findall('[A-Z][a-z]+', s)
['Python', 'Cookbook', 'List', 'Of', 'Contents']
Run Code Online (Sandbox Code Playgroud)
UPDATE
使用regex模块(替代正则表达式模块,替换re),可以拆分零宽度匹配:
>>> import regex
>>> s = 'PythonCookbookListOfContents'
>>> regex.split('(?<=[a-z])(?=[A-Z])', s, flags=regex.VERSION1)
['Python', 'Cookbook', 'List', 'Of', 'Contents']
Run Code Online (Sandbox Code Playgroud)
注意:指定regex.VERSION1标志以启用零拆分长度匹配行为.
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |