1

我想在一个字符串中搜索特定的子字符串并使用 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!>
<.>
< >

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

多谢你们

PS我在哪里可以了解在python中使用正则表达式?我很乐意将正则表达式与 grep 或 awk 一起使用,但我对 python 仍然很陌生,我特别喜欢编译一个正则表达式以反复使用的想法,但我不知道在哪里可以了解更多相关信息

4

1 回答 1

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中创建一个字符串。当我使用'创建字符串时,遇到"时字符串不会结束,我不必转义它。如果您正在创建一个包含 ' 或 " 的字符串,则使用另一个作为开始/停止会很方便。

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

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

于 2013-05-07T10:23:12.470 回答