我想知道是否有任何方法可以找到字符串中有多少对括号。
我必须做一些字符串操作,有时我会有:
some_string = '1.8.0*99(0000000*kWh)'
或类似
some_string = '1.6.1*01(007.717*kW)(1604041815)'
我想做的是:
0000000
)0077171604041815
)如何验证字符串中有多少对括号,以便稍后可以执行以下操作:
if number_of_pairs == 1:
do_this
else:
do_that
或者也许有一种更简单的方法来做我想做的事情,但到目前为止还无法想到。
我知道如何只获取字符串中的数字:final_string = re.sub('[^0-9]', '', my_string)
,但我想知道如何处理这两种情况。
答案 0 :(得分:4)
由于括号总是成对出现,所以只需在字符串中计算左括号或右括号即可得到答案。
num_of_parenthesis = string.count('(')
答案 1 :(得分:0)
如果您想要单个字符串中的所有数字,请在替换任何.
后使用 re.findall 并加入单个字符串:
In [15]: s="'1.6.1*01(007.717*kW)(1604041815)'"
In [16]: ("".join(re.findall("\((\d+).*?\)", s.replace(".", ""))))
Out[16]: '0077171604041815'
In [17]: s = '1.8.0*99(0000000*kWh)'
In [18]: ("".join(re.findall("\((\d+).*?\)", s.replace(".", ""))))
Out[18]: '0000000'
当你想要的只是提取其中的任何数字时,parens的数量是无关紧要的。基于事实"你只有最多两对"我认为格式是一致的。
或者如果parens总是有数字,找到parens中的数据和sub all bar数字:
In [20]: "".join([re.sub("[^0-9]", "", m) for m in re.findall("\((.*?)\)", s)])
Out[20]: '0077171604041815'
答案 2 :(得分:0)
你可以这样做:(假设你已经知道至少有一个括号)
re.sub(r'[^0-9]+', '', some_string.split('(', 1)[1])
或仅与re.sub
:
re.sub(r'^[^(]*\(|[^0-9]+', '', some_string)