[英]How can I perform conditional splitting in python?
当逗号不被()包围时,我想用逗号分割字符串。
str = r"a,b,c,test(1,2,3),g,h,test(2,4,6)"
所需拆分
split = ['a','b','c','test(1,2,3)','g','h','test(2,4,6)']
我如何使用正则表达式python
我到目前为止的努力
splits = [m.start() for m in re.finditer(',', string_i)]
paranths = {10: 16, 26: 32} #using function
lst = []
first = 1
for l in splits:
print l
for m in paranths:
if (l < m and l < paranths[m]):
#print m,':',l,':',paranths[m]
lst.append(string_i[first:l])
first = l+1
break
break
如上文所述,您可以使用后向和前向模式匹配作为负面观察。
import re
my_str = r"a,b,c,test(1,2,3),g,h,test(2,4,6)"
print(re.split('(?<!\(.),(?!.\))', my_str))
您可以使用负回顾后,负前瞻找到所有,
未通过支架包围)(
(?<![)(]),(?![)(])
这是一个实时示例: https : //regex101.com/r/uEyTN8/2
详细资料 :
(?<! )
如果括号内的字符在下一次出现之前匹配,它将取消下一次出现的匹配 (?! )
如果括号内的字符在发生之后匹配,它将取消此匹配项 [)(]
匹配括号 不是正则表达式,但可能会起作用:
def my_split(s):
splits0 = s.split(',')
splits = []
BEWEEN_PARENTHESIS = False
# join everything between parenthesis
for j, elem in enumerate(splits0):
if not BEWEEN_PARENTHESIS:
if "(" in elem:
BEWEEN_PARENTHESIS = True
start = j
else:
splits.append(elem)
elif BEWEEN_PARENTHESIS and ")" in elem:
BEWEEN_PARENTHESIS = False
splits.append(",".join(splits0[start:j+1]))
return splits
s = "a,b,c,test(1,2,3),g,h,test(2,4,6)"
print(my_split(s))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.