0

次のように文字列が格納される変数 Field があります。

Field= "In Field 'fieldname':(Value1) from (DC) to (deleted)"

または、次のこともできます。

 Field= "In Field 'fieldname':(Value1) has changed from (DC) to (1)"

変数 Field に格納されたこの文字列から、次のような 2 つの異なる変数で値 (DC) と (削除) または (DC) を (1) にキャッチしたいと考えています。

OldValue=DC
NewValue=deleted

OldValue=DC
NewValue=1

この変数を Python で次のように処理しています。

 OldValue,NewValue=re.findall(r'\((\d+)\)',Field)

しかし、これは文字列ではなく数字のみをキャッチしますか? 誰でも助けてくれますか

4

2 に答える 2

0

既存のものを次のように変更できますre

>>> re.search(r'from \((.*?)\) to \((.*?)\)$', Field).groups()
('DC', 'deleted')
于 2013-04-22T22:02:48.243 に答える
0

\d正規表現では、数字のみに一致します。\w文字 ( ) と数字 ( )を一致させるに\dは、両方の文字クラス ( [\d\w]) が最適なソリューションです。

注: これにより、文字列内の もキャッチ(Value1)されます。それを除外するには、いくつかのコードが必要です。または、タプルを変更するだけです:

ValueName, OldValue, NewValue = tuple(re.findall(r'\(([\d\w]+?)\)', Field))

ノート:

  1. +?修飾子は、ゼロ以外の最小数のsに一致します (可能な最大数に一致する[\d\w]とは異なります)。+
  2. tuple()によって返されたリストを左辺が理解できるタプルに変換するために必要ですre.findall
于 2013-04-22T22:04:51.667 に答える