Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python正则表达式,如果结果中没有空字符串,如何在多个分隔符上拆分此字符串?_Python_Regex_Split_Whitespace - Fatal编程技术网

使用Python正则表达式,如果结果中没有空字符串,如何在多个分隔符上拆分此字符串?

使用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}”)) 输出 ['{','假设这些符号{}是您要拆分的符号。您可以将任何不包含任何先前字符的

我正试图使用re.split()对这种形式的字符串进行一些粗略的解析:
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', '}']
>>>