在已转换为字符串

时间:2015-06-17 18:51:40

标签: python regex string list

请使用以下代码:

>>>foo = ['abcdefgdfsrf1\tword\tfdsaerg32543','2343221d2\tfds\tss']
>>>print re.findall('(\d+)\s+(\w+)\s',str(foo))
[]

正则表达式未正确匹配,因为列表中每个元素周围的单引号会干扰抛出与整个字符串匹配的引号。改变此代码的最pythonic方法是什么,以便匹配

1\tword\t

\tfds\t

2 个答案:

答案 0 :(得分:4)

此处的问题是str(foo)正在创建foo的代表:

>>> str(foo)
"['abcdefgdfsrf1\\tword\\tfdsaerg32543', '2343221d2\\tfds\\tss']"

所以当你需要文字值时,它会逃脱'\t'

加入它(带空格):

>>> re.findall('(\d+)\s+(\w+)\s',' '.join(foo))
[('1', 'word'), ('32543', '2343221d2')]

或加入非空格字符:

>>> re.findall('(\d+)\s+(\w+)\s','x'.join(foo))
[('1', 'word'), ('2', 'fds')]

或迭代:

>>> [re.findall('(\d+)\s+(\w+)\s', str) for str in foo]
[[('1', 'word')], [('2', 'fds')]]

答案 1 :(得分:2)

你能使用列表理解吗?

>>> [re.findall('(\d+)\s+(\w+)\s', f) for f in foo]
[[('1', 'word')], [('2', 'fds')]]