在已转换为字符串的列表上使用正则表达式

2024-10-03 17:20:38 发布

您现在位置:Python中文网/ 问答频道 /正文

采用以下代码:

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

正则表达式没有正确匹配,因为围绕列表中每个元素的单引号干扰了整个字符串的引号匹配。改变这个代码使之匹配的最python的方法是什么

1\tword\t

以及

\tfds\t

什么


Tags: 字符串代码re元素列表fooprintstr
2条回答

这里的问题是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')]]

你能用列表理解吗

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

相关问题 更多 >