0

次のように、括弧内の内容を一致させたいと思いました (「契約ごと」のものですが、3行目の「=」などの不要な要素は省略します)。

1/100 of a cent ($0.0001) per pound ($6.00 per contract) and 
.001 Index point (10 Cents per contract) and 
$.00025 per pound (=$10 per contract)

次の正規表現を使用しています。

r'.*?\([^$]*([\$|\d][^)]* per contract)\)'

これは、括弧内で a で始まる任意の式でうまく機能しますが、2 行目ではfrom$が省略されます。ここで何が起こっているのかわかりません。110 Cents

4

4 に答える 4

2

おそらく、あまり具体的でない正規表現を使用できます

re.findall(r'\(([^)]+) per contract\)', str)

これは、「$6.00」と「10 セント」に一致します。

于 2013-05-29T21:37:44.467 に答える
1

2 行目では、10 セントから 1 を省略しています。ここで何が起こっているのかわかりません。

何が起こっているかというと、[^$]*貪欲です: それは喜んで数字を一致させ、それに続く を満たすために 1 つの数字だけを残し[\$|\d]ます。(だから、あなたが書いたなら、あなた(199 centsだけが得られるでしょう9)。[^$]*?代わりに次のように記述して修正します。

r'.*?\([^$]*?([\$|\d][^)]* per contract)\)'
于 2013-05-29T21:53:37.867 に答える
0

これは、コメントで指定した出力と一致します。

re.search('\((([^)]+) per contract)\)', str).group(1)
于 2013-05-29T21:47:41.397 に答える
0

以下を使用できます。

r'(?<=\()[^=][^)]*? per contract(?=\))'
于 2013-05-29T21:40:58.980 に答える