如何搜索括号之间的字符并搜索命名的反向引用正则表达式 python

how to search characters between parentheses and search for a named backreference regex python

我有这条线

          15815 (sh): demand=3000000 boost=1 reason=0 sync=0 need_idle=0 flags=80002 grp=0 best_cpu=6 latency=0

我想使用 python 正则表达式提取具有命名反向引用的 sh 和标志值,但总是以 None 类型的对象着陆,我该怎么做?

下面是我尝试过的代码:

pattern = re.compile(r"\((?P<thread>.*?)\)*\sflags=(?P<flags>\d+)")


m = pattern.search(str)
 m.group()
'(sh): demand=3000000 boost=1 reason=0 sync=0 need_idle=0 flags=80002'

您需要匹配 () 以外的任何字符来匹配 (...) 中的内容,然后使用 .*.*? 来匹配直到 flags。然后,您只需使用 group("thread")group("flags") 来访问这些值:

import re
s ='          15815 (sh): demand=3000000 boost=1 reason=0 sync=0 need_idle=0 flags=80002 grp=0 best_cpu=6 latency=0'
pattern = re.compile(r"\((?P<thread>[^()]*)\).*?\bflags=(?P<flags>\d+)")
m = pattern.search(s)
print(m.group("thread")) # => sh
print(m.group("flags"))  # => 80002

Python demo

注意我在 flags= 之前添加了一个单词边界 \b 以匹配 flags 作为一个完整的单词。