在python中捕获字符串的选定部分

时间:2013-04-22 21:56:37

标签: python

我有一个变量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)

但这只捕获数字而不是字符串?任何人都可以帮忙

2 个答案:

答案 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))

注意:

  1. +?修饰符与[\d\w]的最小非零数字匹配(与+不同,后者与可能的最高数字匹配)。
  2. tuple()是将re.findall返回的列表转换为左侧可以理解的元组所必需的。