如何查找不在括号中的字符

时间:2017-07-26 02:21:28

标签: python regex

试图找到所有出现的字符

string1 = '%(example_1).40s-%(example-2)_-%(example3)s_'

这样输出就会出现' - ' ' _'不在括号中

['-', '_', '-', '_']

不需要关心嵌套括号

2 个答案:

答案 0 :(得分:5)

您可以使用模块re通过将正则表达式传递给它

来实现
import re

str = '%(example_1).40s-%(example-2)_-%(example3)s_'
#remove all occurences of paratheses and what is inside
tmpStr = re.sub('\(([^\)]+)\)', '', str)

#take out other element except your caracters
tmpStr = re.sub('[^_-]', '', tmpStr)

#and transform it to list
result_list = list(tmpStr)

结果

['-', '_', '-', '_']

就像Bharath shetty在评论中提到的那样,不要使用str,它是python中内置字符串的保留字

答案 1 :(得分:2)

以下内容将为您提供输出。:

>>> import re
>>> str = '%(example_1).40s-%(example-2)_-%(example3)s_'
>>> print list("".join(re.findall("[-_]+(?![^(]*\))", str)))
['-', '_', '-', '_']

这样做是在'-'中找到包含'_'和/或str的所有子字符串,而不在括号中。由于这些是子字符串,我们通过连接和分割成列表来获得所有这些匹配字符。