如何从字符串中提取数据

时间:2017-05-21 20:04:00

标签: python regex

我的代码是

import regex

word = '\x02|1280|SELECT|35;36|="214554"'.encode('ascii')

pattern = r'^(\x02)\|(\d{1,4})\|(SELECT|UPDATE|INSERT)\|(\d{1,2}+|;*)\|="(\w+)"'.encode('ascii')

print(regex.match(pattern, word).group(4))

我对第4组感兴趣 - > (\ d {1,2} + |; *)可以有以下模式

  • |一位数|
  • |两位数|
  • |一位/两位数;一位/两位数字; ......;一位/两位数|

我尝试过不同的组合,但由于我是regex的新手,所以没有人会从群组中返回数据。

2 个答案:

答案 0 :(得分:1)

如何将第4组的模式更改为:(\d{1,2}(?:;\d{1,2})*)

  • \d{1,2}代表一位或两位数字
  • (?:;\d{1,2})*表示零个或多个非捕获组,其中包含分号;后跟一个或两个数字
  • 重要的是,通过在开始时添加(?:来将群组标记为非捕获

Regex101 Demo

希望这有帮助!

答案 1 :(得分:0)

\d{1,2}+|;*模式匹配1或2位占有或0+分号。所以,这不是你需要的。

你需要写这样的模式:

r'^(\x02)\|(\d{1,4})\|(SELECT|UPDATE|INSERT)\|(\d{1,2}(?:;\d{1,2})*)\|="(\w+)"'

请参阅Python demo

第4组模式看起来像(\d{1,2}(?:;\d{1,2})*)

  • \d{1,2} - 1或2位数字
  • (?: - 开始匹配序列的非捕获组....
    • ; - 分号
    • \d{1,2} - 1或2位数字
  • )* - ....零次或多次出现。