0

例えば。文字列は次のとおり
"cd 1.2 ab 2.3 cd"です。
パターンを使用する場合 "[0-9]*\.[0-9]*"、およびre.searchサブ文字列を検索します。戻り1.2ます。帰りたい2.3
どうすればPythonを反対方向に検索できますか?findall関数を使用してすべてのサブ文字列を取得するのは好きではありません。次に最後のものを使用します

4

4 に答える 4

7

これはこの場合に機能します:\d+\.\d+(?=\D*$)

文字列全体で最後の桁に続く他の桁がない場合は、最後の桁を取得します。

デモ+説明: http: //regex101.com/r/hE0lE4

于 2012-12-24T02:05:03.417 に答える
0
   1. re.search('[0-9]*\.[0-9]*',a[::-1]).group()


   2. re.search(r'(\d\.\d)(\s\w+$)',a).group(1)
于 2012-12-24T17:50:19.510 に答える
0

使用re.finditer():

In [150]: strs="cd 1.2 ab 2.3 cd"

In [151]: for x in re.finditer(r"\d+\.\d+",strs):pass

In [152]: x.group()
Out[152]: '2.3'
于 2012-12-24T02:13:49.637 に答える
0

最後の 1 つ (またはパターンに一致させたい最後のもの) が必要な場合は.*、興味のある最後のパターン マッチまで最も貪欲な一致を使用します。

>>> import re
>>> st="cd 1.2 dv 1.4 ab 2.3 cd"
>>> re.match(r'.*(\d\.\d)',st).group(1)
'2.3'

しかしre.findall、より柔軟で簡単で、おそらく最速です:

>>> re.findall(r'(\d\.\d)',st)
['1.2', '1.4', '2.3']
>>> re.findall(r'(\d\.\d)',st)[-1]
'2.3'
>>> re.findall(r'(\d\.\d)',st)[-2]
'1.4'

もちろん、文字列を逆にして、最初の一致を逆の正規表現と照合し (対称でない場合)、結果を逆にすることができます。

>>> re.search(r'(\d\.\d)',st[::-1]).group(1)[::-1]
'2.3'

これはPerlで定期的に行われます

于 2012-12-24T02:43:14.713 に答える