首页 > 解决方案 > 如果单词没有任何数字,则拆分字符串

问题描述

我想将字符串拆分为空格或任何特殊字符上的单词。但是,如果拆分之前 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”。

标签: pythonregexsplit

解决方案


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

推荐阅读