Python - 搜索文本,复制部分行

时间:2011-12-03 15:17:45

标签: python search

我有一个文本文件(alarm.txt),我将其转换为字符串。 alarm.txt文件包含:

Customer Name: LOU
Site: Sao Paulo
Node Name: SPRouter
IP address: 1.2.3.4

我用read()打开它。我已经尝试过readlines(),但这似乎不起作用:

alarm = open('alarm.txt').read()

所以现在我正在尝试搜索“Site:”并在Site之后复制文本:直到行尾(在本例中我想将“Sao Paulo”复制到一个新字符串中)。

我已经尝试过re.findall,re.match,re.search。

print re.search(r"Site:*\n", alarm)

我希望上面的代码能够在字符串中搜索Site:并打印“Site:Sao Paulo”这一行但是它有错误。然后将Site:之后的内容复制成一个单独的字符串,这是另一个故事。

3 个答案:

答案 0 :(得分:3)

只是提供不同的解决方案,您可以将行拆分为键/值对并填充字典:

conf = dict()
for line in open("test.txt"):
    key, value = line.rstrip().split(": ", 1)
    conf[key] = value

print conf["Site"]

答案 1 :(得分:2)

我认为你需要

print re.search(r"Site:\s*(.*)", alarm).group(1)

答案 2 :(得分:2)

正则表达式具有特殊语法。简而言之,您正在寻找

re.findall(r"^Site:\s*(.*)$", alarm, re.MULTILINE)

但你也可以这样做

m = re.search(r"^Site:\s*(.*)$", alarm, re.MULTILINE)

然后继续例如m.group(1)

为什么这一切?

  • r""将字符串转换为原始字符串,以便保留所有\并将其提供给re引擎。
  • RE本身:^是字符串或行的开头,\s*是一个可选的空格序列(空格,制表符等),()是一个捕获组,{{ 1}}是“所有”,.*是行尾或字符串。
  • $用于识别字符串中的行。
  • re.MULTILINE为您提供了m.group个群组。