Python re regex子字母不包含在引号中,如果它们与特定单词(包括regex group/match)匹配,则不包含在引号中
我需要将未用引号括起来的字母分为多个子字母,如果它们将单词Python re regex子字母不包含在引号中,如果它们与特定单词(包括regex group/match)匹配,则不包含在引号中,python,regex,re,Python,Regex,Re,我需要将未用引号括起来的字母分为多个子字母,如果它们将单词与当前的匹配,则不需要将其分为一个特定字符串,其中一部分包含匹配组,例如 重新导入 导入字符串 s='AB+B+“你好”+TODAY()/C*100' x=re.sub(r'\“[^”]*\“|\b今天([A-Z]+)”,r'a2num(“\g”)”,s) 打印(x) 预期产出: 'a2num(“AB”)+a2num(“B”)+“HELLO”+TODAY()/a2num(“C”)*100' 实际产量: 'a2num(“AB”)+a2n
与当前的
匹配,则不需要将其分为一个特定字符串,其中一部分包含匹配组,例如
重新导入
导入字符串
s='AB+B+“你好”+TODAY()/C*100'
x=re.sub(r'\“[^”]*\“|\b今天([A-Z]+)”,r'a2num(“\g”)”,s)
打印(x)
预期产出:
'a2num(“AB”)+a2num(“B”)+“HELLO”+TODAY()/a2num(“C”)*100'
实际产量:
'a2num(“AB”)+a2num(“B”)+a2num(“你好”)+a2num(“今天”)/a2num(“C”)*100'
我几乎做到了,但它没有遵守引号规则或今天的
单词规则,我知道字符串没有任何意义,但它只是对正则表达式的一个严格测试您的正则表达式方法是正确的,但您需要在re.sub
>>> s = 'AB+B+" HELLO"+TODAY()/C* 100'
>>> rs = re.sub(r'"[^"]*"|\bTODAY\b|\b([A-Z]+)\b',
... lambda m: 'a2num("' + m.group(1) + '")' if m.group(1) else m.group(), s)
>>> print (rs)
a2num("AB")+a2num("B")+" HELLO"+TODAY()/a2num("C")* 100
您只需要匹配大写字母即可?@00是的,整个字符串将在手之前已大写