簡體   English   中英

Python 正則表達式 - 小組賽

[英]Python Regex - group match

import re
details = '(2,5  cr / K / M)'
m = re.match(r'\((.*?)\w+cr\w/\w(.)\w/\w(.)\)', details)

credit = m.group(0)
state = m.group(1)
grade = m.group(2)


course = {'credit': credit, 'state': state, 'grade': grade}

print course

正如此代碼段所示,我想獲取 ( ? cr / ? / ? ),但它不起作用。

改變:

m = re.match(r'\((.*?)\w+cr\w/\w(.)\w/\w(.)\)', details)

到:

m = re.match(r'\((\S+)\s+cr\s+/\s+(\S)\s+/\s+(\S)\)', details)

其中\\s是“空白”,而\\S是“除空白之外的任何東西”。

看起來你只是混淆了 w 和 s .. 可能不適合所有邊緣情況:

import re

details = '(2,5  cr / K / M)'
pattern = re.compile(r'^\(([0-9],[0-9]).*/\s([A-Z])\s/\s([A-Z])\)')
m = pattern.match(details)

credit = m.group(1)
state = m.group(2)
grade = m.group(3)

course = {'credit': credit, 'state': state, 'grade': grade}

print course

您可以使用\\w[^\\s)]*然后刪除任何不需要的值:

>>> s = '(2,5  cr / K / M)'

>>> re.findall(r'\w[^\s)]*', s)
['2,5', 'cr', 'K', 'M']

然后你只需要在索引 1 處分配丟棄cr值。

>>> s = '(2,5  cr / K / M)'
>>> out = re.findall(r'\w[^\s)]*', s)
>>> credit = out[0]
>>> state = out[2]
>>> grade = out[3]
>>> course = {'credit': credit, 'state': state, 'grade': grade}
>>> course
{'state': 'K', 'grade': 'M', 'credit': '2,5'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM