python - 如果单词没有任何数字,则拆分字符串
问题描述
我想将字符串拆分为空格或任何特殊字符上的单词。但是,如果拆分之前 AND 之后的单词包含一个数字,并且它不是空格字符,那么我不希望它拆分。
“abc abc-def a2b-def a2b-d3f”
应该变成-(注意最后一句话)
“abc”、“”、“abc”、“-”、“def”、“”、“a2b”、“-”、“def”、“”、“a2b-d3f”
我试过了
b = "abc abc-def a2b-def a2b-d3f ab2-3cd"
print(re.split(r"((?<=\D)[\W]|[\W](?=\D)|\s)",b))
print(re.split(r"((?<!\b\w*\d\w*\b)[\W]|[\W](?!\b\w*\d\w*\b)|\s)",b))
第一种有效,但它只考虑上一个或下一个单词的最后一个字符和第一个字符。它将“ab2-3cd”保持为一个单词,但它不适用于“a2b-c3d”。
第二个给我一个错误“look-behind requires fixed-width pattern”,因为它不允许我在回顾或展望中使用 *。
请帮帮我!
编辑:单词可以是任意长度,“abcdef”。
解决方案
import re
s = "abc abc-def a2b-def a2b-d3f"
s = re.split(r'(?:(?<=[\da-z]{3})(\s|-)(?=[a-z]{3})|(?:(?<=[a-z]{3})(\s|-)(?=[a-z\d]{3})))', s)
s = [i for i in s if i is not None]
print(s)
印刷:
['abc', ' ', 'abc', '-', 'def', ' ', 'a2b', '-', 'def', ' ', 'a2b-d3f']
编辑:
重新进口
s = "a2dc abc axx2b-dss3f abc-def a2b-abc a2b-d3f"
s = re.split(r'(\s|-)(?=[a-z]+(?:-|\s))', s)
out = []
for w in s:
out.extend(re.split(r'(?<=[a-z\d])(\s)(?=[a-z\d])', w))
print(out)
印刷:
['a2dc', ' ', 'abc', ' ', 'axx2b-dss3f', ' ', 'abc', '-', 'def', ' ', 'a2b', '-', 'abc', ' ', 'a2b-d3f']
推荐阅读
- ios - 获取 Wifi(SSID) 列表 ios 应用程序并连接到我的应用程序是可能的吗?
- linux - 未投递的邮件退回给发件人 - 不同的域目的地
- google-cloud-spanner - CloudSpanner 是否支持模糊搜索或通配符搜索?
- google-cloud-platform - 围绕创建 VPC 访问连接器的困惑
- select - Azure AD Graph 组成员 oData 结果限制
- php - 此 Convert JSON in Array 返回为 null
- python - 循环列表中的多个范围
- vue.js - 监视计算属性的代码似乎永远不会运行
- rust - 如何解决错误“线程'main'在'没有当前反应堆'时恐慌”?
- javascript - 如何让 onKeyPress 在 iOS 上使用盲文显示器给我最后的按键输入?