我有一个变量Field,其中的字符串存储如下:
Field= "In Field 'fieldname':(Value1) from (DC) to (deleted)"
或者它也可以是:
Field= "In Field 'fieldname':(Value1) has changed from (DC) to (1)"
从存储在变量Field中的这个字符串中,我想在两个不同的变量中捕获值(DC)和(删除)或(DC)到(1),如:
OldValue=DC
NewValue=deleted
OldValue=DC
NewValue=1
我在Python中处理这些变量:
OldValue,NewValue=re.findall(r'\((\d+)\)',Field)
但这只捕获数字而不是字符串?任何人都可以帮忙
答案 0 :(得分:0)
您可以将现有的re
更改为:
>>> re.search(r'from \((.*?)\) to \((.*?)\)$', Field).groups()
('DC', 'deleted')
答案 1 :(得分:0)
\d
仅匹配数字。为了匹配字母(\w
)和数字(\d
),最佳解决方案是两者的字符类([\d\w]
)。
注意:这也会捕获字符串中的(Value1)
。你需要一些代码来过滤掉它;或者,只需修改元组:
ValueName, OldValue, NewValue = tuple(re.findall(r'\(([\d\w]+?)\)', Field))
注意:
+?
修饰符与[\d\w]
的最小非零数字匹配(与+
不同,后者与可能的最高数字匹配)。tuple()
是将re.findall
返回的列表转换为左侧可以理解的元组所必需的。