使用Python正则表达式,如果结果中没有空字符串,如何在多个分隔符上拆分此字符串?
我正试图使用re.split()对这种形式的字符串进行一些粗略的解析:使用Python正则表达式,如果结果中没有空字符串,如何在多个分隔符上拆分此字符串?,python,regex,split,whitespace,Python,Regex,Split,Whitespace,我正试图使用re.split()对这种形式的字符串进行一些粗略的解析:chord=“{8}。此外,括号并不出现在每个输入字符串中,因此字符串可能以“c”、“f”、“a”、“3”等开头。 我希望从上述示例字符串中得到以下结果: “{,”,“{,”,“可能是一个类似于 [{}]|[^\s><\r\n{}]+|[><] 那么 [^\s><\r\n{}]+ [^\s>8}”)) 输出 ['{','假设这些符号{}是您要拆分的符号。您可以将任何不包含任何先前字符的
chord=“{8}
。此外,括号并不出现在每个输入字符串中,因此字符串可能以“c”、“f”、“a”、“3”等开头。
我希望从上述示例字符串中得到以下结果:“{,”,“{,”,“可能是一个类似于
[{}]|[^\s><\r\n{}]+|[><]
那么
[^\s><\r\n{}]+
[^\s>8}”))
输出
['{','假设这些符号{}
是您要拆分的符号。您可以将任何不包含任何先前字符的令牌与类似[^{}\s]+
的内容进行匹配,当然,您可以将任何字符与类似[{}]
的内容进行匹配
然后整个正则表达式将是[^{}\s]+|[{}]
>>> import re
>>> chord = "{<c,,4-^ f' a>8}"
>>> re.findall(r'[^{<>}\s]+|[{}<>]', chord)
['{', '<', 'c,,4-^', "f'", 'a', '>', '8', '}']
>>>
>>重新导入
>>>和弦=”{到目前为止,您的答案适用于我运行它所针对的所有测试字符串。正则表达式中的两个=
字符产生了什么影响?两个出现在右尖括号后面--这两个组合是否具有特殊意义?或者=
字符是否进行了文字匹配?表达式在我的示例字符串wh上给出了相同的结果en我拿出了=
。另外,请在我对dcg答案的评论中查看我关于re.findall vs re.split的问题。非常感谢指向regex101站点的指针。紧凑,尽可能可读,并且到目前为止,它在我的所有测试字符串上都给出了预期的结果。很明显,re.strip不是这个工作的合适工具。有什么问题吗关于何时使用re.strip vs re.findall在字符边界处分割字符串的提示。re.split
的问题是,它将根据您传入的正则表达式所做的匹配来分割字符串,因此您必须传递所需的补码,在这种情况下,我看不到明确的解决方案(也看不到任何解决方案)到目前为止,我收到的两个答案都很有帮助,并且给出了基本相同的解决方案。我选择了较短的一个作为我的“答案”“因为语言更清晰,正则表达式更简单,适合我的情况。另一个答案显示了如何处理换行,并提供了指向伟大的正则表达式测试站点的链接,因此不相上下。
[><]
import re
print(re.findall(r"[{}]|[^\s><\r\n{}]+|[><]", "{ < c,,4-^ f' a> 8}"))
['{', '<', 'c,,4-^', "f'", 'a', '>', '8', '}']
>>> import re
>>> chord = "{<c,,4-^ f' a>8}"
>>> re.findall(r'[^{<>}\s]+|[{}<>]', chord)
['{', '<', 'c,,4-^', "f'", 'a', '>', '8', '}']
>>>