我有这个字符串:Python的正则表达式,排除引号比赛
s = MY_FUNC(AVG, WFC US EQUITY, WFC US EQUITY, ">+3%", 1,1,7)
而这正则表达式,搜索括号,逗号和简单的操作符。我需要排除双引号内的任何匹配项,并能够在匹配项上进行分割。请注意,解决方案仍然必须在字符串的其余部分搜索parens,逗号和运算符。 当前正则表达式的版本:
tokenize_regex = re.compile(r'([\[\]\(\)\+\-\*/<>=!,])')
比赛为s
是:
Match 1
1. (
Match 2
1. ,
Match 3
1. ,
Match 4
1. ,
Match 5
1. >
Match 6
1. +
Match 7
1. ,
Match 8
1. ,
Match 9
1. ,
Match 10
1. )
当我做:
tokens = Formula.tokenize_regex.split(self.formula)
print 'tokens: ' + str(tokens)
它返回:
tokens: [u'MY_FUNC', u'(', u'AVG', u',', u' WFC US EQUITY', u',', u' WFC US EQUITY', u',', u' "', u'>', u'', u'+', u'3%"', u',', u' 1', u',', u'1', u',', u'7', u')', u'']
但我需要d它排除在报价的数量,所以比赛应该是:
Match 1
1. (
Match 2
1. ,
Match 3
1. ,
Match 4
1. ,
Match 5
1. ,
Match 6
1. ,
Match 7
1. ,
Match 8
1. )
和令牌应该是:
tokens: [u'MY_FUNC', u'(', u'AVG', u',', u' WFC US EQUITY', u',', u' WFC US EQUITY', u',', u'">+3%"', u',', u' 1', u',', u'1', u',', u'7', u')', u'']
决定什么是“内部”行情是很难用正则表达式。最好的办法可能是使用正则表达式在预处理步骤中连续删除引号内的所有内容,但即使嵌套引号也可能造成问题。 –
不要在这种情况下尝试使用're.split',尝试为're构建一个模式。findall',它更简单,更高效。 –
没关系,如果它嵌套引号中断。 – user1387717