我在字符串中有以下变量
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
答案 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
答案 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。