您好,我在使用正则表达式从文本中提取特定单词时遇到问题。 行:
limk ab1
limk ab2 helo
rest helo
ab3 limk helo
ab4 limk
仅当limk
在我要查找的单词之前或之后,并且limk
在它的开头时,我才需要3个字母作为输出其之后-应该在该行的末尾。在这一行中,我只需要寻找潜伏的事物和价值。
预期输出:
ab1
ab4
我的正则表达式:
r'(^[0-9a-zA-Z]{3} \blimk\b)|(\blimk\b [0-9a-zA-Z]{3}$)'
有人可以解释我应该如何纠正它? 谢谢
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用
(?m)^(?:limk\s+([a-zA-Z0-9]{3})|([a-zA-Z0-9]{3})\s+limk)$
请参见regex demo。
详细信息
(?m)
-使锚点与换行符匹配^
-一行的开头(?:
-容器非捕获组的开始(将锚应用于所有替代方案):
limk
-limk
位于行尾\s+
-超过1个空格([0-9a-zA-Z]{3})
-捕获第1组:三个数字字符|
-或
([0-9a-zA-Z]{3})
-捕获第2组:三个数字字符\s+
-超过1个空格limk
-一个limk
字)
-分组结束$
-字符串的结尾。import re
rx = re.compile(r"^(?:limk\s+([a-zA-Z0-9]{3})|([a-zA-Z0-9]{3})\s+limk)$", re.M)
s = "limk ab1\nlimk ab2 helo\nrest helo\nab3 limk helo\nab4 limk"
print (["{}{}".format(x,y) for x,y in rx.findall(s)])
# => ['ab1', 'ab4']
答案 2 :(得分:1)
^([0-9a-zA-Z]{3})\s+limk$|^limk\s+([0-9a-zA-Z]{3})$
代码:
import re
s = """limk ab1
limk ab2 helo
rest helo
ab3 limk helo
ab4 limk"""
matches = [x[0] if x[0] != '' else x[1] for x in re.findall(r'(?m)^([0-9a-zA-Z]{3})\s+limk$|^limk\s+([0-9a-zA-Z]{3})$', s)]
for match in matches:
print(match)
打印:
ab1
ab4