2016-06-15 15 views
1

文字列中の括弧のペア数を調べる方法があるのでしょうか?Pythonの文字列に括弧が何個存在するかを確認してください

は、私はいくつかの文字列操作を行う必要があると私は時々のようなものがあります:私がやりたいのは何

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

または

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

のようなものは次のとおりです。

  • 括弧(例えば、最初の文字列のために:0000000
  • 括弧の2ペア(常に最大2ペアが存在します)すべての桁を取得し、それらを結合(私が持っているでしょう2番目の文字列のための例:0077171604041815)がある場合
  • if number_of_pairs == 1: 
        do_this 
    else: 
        do_that 
    

    それとも私が欲しいものを行うための簡単な方法がありますが、考えることができませんでした:私は私のような、後で何かをすることができるように、文字列内にあるどのように多くの括弧のペアを検証するにはどうすればよい

今のところ

私は文字列内の数字だけを取得する方法を知っています:final_string = re.sub('[^0-9]', '', my_string)しかし、私は両方のケースをどのように扱うことができるのだろうかと思っています。

+0

's =(some_string.count("( ")" + some_string.count( ")"))/ 2' –

+1

入れ子のかっこはどうですか? –

+0

明確にする:適切なネスティングを確認する必要はありません(これは通常の言語ではないためです)。 – dhke

答えて

4

括弧は常にペアで表示されるため、文字列の左か右かっこを数えれば答えが出ます。

num_of_parenthesis = string.count('(') 
+0

括弧が一致していないというリスクがある場合は、文字列にいくつの ')'が存在するかを数えることもできます。 – arewm

+0

@arewm正しい表現では常に括弧がペアで存在するため、リスクはありません。 –

+0

正しい表現があればリスクはあまりないことに同意します。式が正しいことを知る前に、このチェックを実行して、優雅なエラー処理の機会を与えてくれたので、私は提案を提示しました。ここでは関係ないかもしれませんが、将来見えるかもしれない他の人たちの思い出に過ぎません。 – arewm

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' 

たときに、すべての括弧の数は関係ありませんあなたはそれらの中に任意の数字を抽出することが欲しいです。 "あなたは最大2つのペアしか持っていない"という事実に基づいて、私はフォーマットが一貫していると推測します。

または括弧は常に数字を持っている場合は、括弧内のデータを検索し、サブはすべての数字バー

In [20]: "".join([re.sub("[^0-9]", "", m) for m in re.findall("\((.*?)\)", s)]) 
Out[20]: '0077171604041815' 
0

あなたは行うことができます:(あなたがすでにあります知っていると仮定すると、少なくとも1 Parentheseの)

re.sub(r'[^0-9]+', '', some_string.split('(', 1)[1]) 

のみとre.sub

re.sub(r'^[^(]*\(|[^0-9]+', '', some_string) 
関連する問題