验证Python中字符串中存在多少对括号

时间:2016-06-15 11:19:24

标签: python regex string python-3.x

我想知道是否有任何方法可以找到字符串中有多少对括号。

我必须做一些字符串操作,有时我会有:

some_string = '1.8.0*99(0000000*kWh)'

或类似

some_string = '1.6.1*01(007.717*kW)(1604041815)'

我想做的是:

  • 获取括号之间的所有数字(例如第一个字符串:0000000
  • 如果有2对括号(总会有最多2对)得到所有数字并加入它们(例如第二个字符串我将会:0077171604041815

如何验证字符串中有多少对括号,以便稍后可以执行以下操作:

if number_of_pairs == 1:
    do_this
else:
    do_that

或者也许有一种更简单的方法来做我想做的事情,但到目前为止还无法想到。

我知道如何只获取字符串中的数字:final_string = re.sub('[^0-9]', '', my_string),但我想知道如何处理这两种情况。

3 个答案:

答案 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)