使用正则表达式填充列表会导致python

时间:2013-05-07 10:17:34

标签: python regex list pattern-matching

我想在字符串中搜索特定的子字符串,并使用re将这些子字符串存储在列表中,我将如何进行此操作?

到目前为止,这是我的代码:

#!/usr/bin/env python
from sys import stdin
import re as reg

regex = reg.compile(r"\".*\"")#match "  match me  "
line = stdin.readline().strip().split()
myList = [ match for match in regex.finditer(line) ]
print myList

以下是示例输入:

"RUn.exe O" "" "   2ne, " two! . " "

这个预期的输出,无需添加括号,这只是我澄清所需的具体匹配:

<RUn.exe O>
<>
<   2ne, >
<two!>
<.>
< >

所以基本上,引号之间的任何内容都是输出的一部分,应该写入列表,没有引号的任何内容都应该写入列表

谢谢你们

P.S。我在哪里可以学习在python中使用正则表达式?我很喜欢用grep或awk使用正则表达式,但我仍然是python的新手,我特别喜欢编译正则表达式的想法一遍又一遍地使用,但我不知道在哪里可以了解更多

1 个答案:

答案 0 :(得分:0)

我认为这就是你正在寻找的东西,你可能可以在没有for循环的情况下做到......

line = '"RUn.exe O" "" "   2ne, " two! . " "'
import re
regex = re.compile(r'"[^"]*"|[^\s]+')
matches = [el.strip('"') for el in regex.findall(line)]

print '\n'.join(matches)

你可以使用'和'在python中创建一个字符串。当我使用'时,字符串不会在遇到“时结束”,我不必逃避它。如果你正在创建一个包含'或'的字符串,那么使用另一个字符串作为开始/停止是很方便的。

正则表达式的工作原理如下:首先找到一个“。[^”]表示任何不是(^)a的东西,并匹配任意数量的这个(*)。然后找到另一个“。 类似地,[^ \ s]表示不是空格的任何内容,+表示一个或多个。

re的文档可能有线索:http://docs.python.org/2.7/library/re.html#match-objects