如何通过使用python正则表达式匹配单词来提取特定数字?

2024-05-16 19:05:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python正则表达式提取版本号

下面的字符串存储在“str1”变量中

show.sh
 {
   "sys_0_num" :  {
   "rel_num": 2.3,
   "version": 14891
 },
   "sys_1_num" :  {
   "rel_num": 2.3,
   "version": 14891
 }

  "cha_num" :  {
  "rel_num": 2.3,
  "version": 571,
  "model":1487
 }

}

我想从每个组件中提取版本号,即

系统0数量版本:14891
系统编号版本:14891
查努姆版本:571

我在下面的行代码中尝试了此操作,但无法获得所需的输出(上面的字符串存储在str1变量中):

 Sample code 
 output2 = re.findall(r'sys_0_num\[version]:\s*(\d+)',str1)[0]

Tags: 字符串版本数量modelversion系统版本号show
1条回答
网友
1楼 · 发布于 2024-05-16 19:05:59

您可以使用模式"(\w+)"\s*:\s*\{.*?("version"\s*:\s*\d+),它有两个捕获组:一个用于标识符字符串,即"(\w+)"\s*:\s*\{,另一个用于版本,即("version"\s*:\s*\d+),以及用于多行匹配的re.DOTALL标志

>>> text=''' {
   "sys_0_num" :  {
   "rel_num": 2.3,
   "version": 14891
 },
   "sys_1_num" :  {
   "rel_num": 2.3,
   "version": 14891
 }
  "cha_num" :  {
  "rel_num": 2.3,
  "version": 571,
  "model":1487
 }
}'''
>>> re.findall('"(\w+)"\s*:\s*\{.*?("version"\s*:\s*\d+)', text, re.DOTALL)

[('sys_0_num', '"version": 14891'), ('sys_1_num', '"version": 14891'), ('cha_num', '"version": 571')]

您可以稍后加入并打印它们:

>>> print('\n'.join(' '.join(match) for match in re.findall('"(\w+)"\s*:\s*\{.*?("version"\s*:\s*\d+)', text, re.DOTALL)))

sys_0_num "version": 14891
sys_1_num "version": 14891
cha_num "version": 571

相关问题 更多 >