【问题标题】:Filling a list with regular expression results python用正则表达式结果python填充列表
【发布时间】:2013-05-01 06:15:35
【问题描述】:

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

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

谢谢大家

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

【问题讨论】:

  • 您的问题不清楚。您能否添加输入数据和所需输出的示例?
  • 抱歉,发完这篇文章后我很累,所以我没有时间添加示例,然后我就干了。我现在添加了示例输入/输出。感谢观看

标签: python regex list pattern-matching


【解决方案1】:

我认为这就是您要寻找的东西,但您也许可以不使用 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中创建一个字符串。因为我使用'创建字符串,遇到"时字符串不会结束,我不必转义它。如果您正在创建一个包含 ' 或 " 的字符串,则可以方便地使用另一个作为开始/停止。

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

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

【讨论】:

  • 对不起,我之前不是很清楚,现在我已经澄清了一些细节。我创建的正则表达式并不总是符合我的需要,这就是为什么你发布的那个也不起作用。谢谢你的回答
  • 你能解释一下那个正则表达式的作用吗?它如何匹配引号而不必转义它们('\')?你能解释一下为什么第一个括号 [^"] 没有按字面意思匹配,尽管它是以引号开头的。"\s" 不是只匹配空白字符吗?* 匹配是什么?你的解决方案效果很好,但是我不知道它是如何或为什么起作用的。
猜你喜欢
  • 1970-01-01
  • 2021-10-07
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2014-04-08
  • 2012-09-02
相关资源
最近更新 更多