我想從字符串中提取一些字段,但是我不確定它們有多少個字段。 但是,我使用正則表達式,有一些我不明白的問題。python re matches groups
例如:
199 -> (199)
199,200 -> (199,200)
300,20,500 -> (300,20, 500)
我試了一下,但是有些我不能得到這個工作。 希望任何人都可以給我一些建議。我會感激。
的正則表達式我想:
>>> re.match('^(\d+,)*(\d+)$', '20,59,199,300').groups()
('199,', '300')
// in this, I do not really care about ',' since I could use .strip(',') to trim that.
我做了一些谷歌:並試圖re.findall使用,但我不知道我怎麼得到這個:
>>> re.findall('^(\d+,)*(\d+)$', '20,59,199,300')
[('199,', '300')]
--- -------------------------------------------------- - 更新
我意識到沒有講完整個故事,這個問題可能會讓人困惑。 基本上我想驗證在crontab(或類似的)中定義的語法
我爲_VALID_EXPRESSION創建一個數組:它是一個嵌套元組。
(field_1,
field_2,
)
每個field_1,它有兩個元,
field_1: ((0,59), (r'....', r'....'))
valid_value valid_format
在我的代碼
,它看起來像這樣:
_VALID_EXPRESSION = \
12 (((0, 59), (r'^\*$', r'^\*/(\d+)$', r'^(\d+)-(\d+)$',
13 r'^(\d+)-(\d+)/(\d+)$', r'^(\d+,)*(\d+)$')), # second
14 ((0, 59), (r'^\*$', r'^\*\/(\d+)$', r'^(\d+)-(\d+)$',
15 r'^(\d+)-(\d+)/(\d+)$', r'^(\d+,)*(\d+)$')), # minute
16 ....)
在我的解析函數
,所有我需要做的就是隻需提取所有組,看看它們是否在有效值內。
我需要的正則表達式之一是它能夠正確匹配這個字符串'50,200,300',並在這種情況下提取所有數字。 (當然我可以使用split(),但是,它會背叛我的初衷,所以我不喜歡這個主意。)
希望這會有所幫助。
告訴我們你試過的東西。除了這個事實,它使答覆者認爲你正在努力工作,而不僅僅是尋找解決方案,它還讓我們告訴你你錯了什麼,找到符合你理解的答案等。 – abarnert 2013-02-28 18:32:15
在你的問題,你已經有'199'或'199,200'或'300,20,500'全部標記爲一段代碼。這是實際的源字符串,還是「199,200」?如果是後者...你爲什麼要匹配任何東西?如果你只是想匹配整個事情,你不需要正則表達式... – abarnert 2013-02-28 18:41:34
你的問題仍然是模糊的。你想在第二個例子中使用字符串「(199,200)」嗎?如果是這樣,只是'({}).format(s)'有什麼問題?那麼你在談論的其他規則是什麼,它們不能像這些一樣被分割(',')? – abarnert 2013-02-28 18:46:10