返回匹配搜索字符串的下一行

时间:2017-07-12 01:34:07

标签: python regex

我在字符串中有以下变量

some_var = ".... \n
... \n
Hello Subject \n
12:34:56:78:90 \n
... \n"

我试图获得价值123456789。我尝试了以下代码,但是从匹配的行中给出了下两行。

re.search(r'Subject((.*\n){2})', some_var).group()

输出上述代码:

Hello Subject
12:34:56:78:90

预期产出:

12:34:56:78:90

4 个答案:

答案 0 :(得分:3)

我不知道是什么促使您选择正在使用的模式,但是提取该数字看起来不对。相反,请使用此模式:

Subject.*\n(.*?)\n

然后使用group(1)访问匹配的号码,some_var = ".... \n... \nHello Subject \n12:34:56:78:90 \n... \n" print re.search(r'Subject.*\n(.*?)\n', some_var).group(1) 是第一个(也是唯一的)匹配的捕获组。

# grep "alex" test

Demo

答案 1 :(得分:1)

蒂姆答案的一个小修改:

some_var = ".... \n... \nHello Subject \n12:34:56:78:90 (0x44) \n... \n"
print re.search(r'Subject.*\n(\S+)', some_var).group(1)

<强>说明: \S+ =获取第一个字符串并避免(0x44)

<强> Demo

答案 2 :(得分:0)

这可能有用。

import re;
some_var = ".... \n... \nHello Subject \n12:34:56:78:90 \n... \n";
# you might want to try \r too if its required with \n
s = re.search('Subject[\ ]*\n([\d:]+)', some_var);
if s:
    print(s.group(1));

答案 3 :(得分:0)

如果您不需要将Subject作为整个单词匹配,并且如果您不关心在{{Subject之下的行匹配的符号类型,则可能没有正则表达式1}} substring。

使用

some_var = ".... \n    ... \n    Hello Subject \n    12:34:56:78:90 \n    ... \n"
lst = some_var.split("\n")              # Split at newline
cnt = len(lst)                          # Get the item count
for idx, line in enumerate(lst):        # Enumerate lst to access index + item
    if "Subject" in line and idx < cnt - 1: # If not at end and line has "Subject"
        print(lst[idx+1].strip())       # Strip from whitespace and print next line

请参阅Python demo