亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
如何從右向左逆向正則匹配?
[打印本頁]
作者:
liaozd
時(shí)間:
2014-01-19 16:53
標(biāo)題:
如何從右向左逆向正則匹配?
本帖最后由 liaozd 于 2014-01-20 07:01 編輯
比如字符串:
s0 = "I_WTR1010someWord"
s1 = “I_WTR1010bg_v01.1010”
s2 = “I_WTR1010bg_v01.1010someWord”
s3 = “I_WTR1010bg_v01.321someWord”
我想匹配右側(cè)第一次出現(xiàn)的1010,并且把字符串變成如下的tuple:
s0 > ("I_WTR", "1010","someWord" )
s1 > ("I_WTR1010bg_v01.", "1010")
s2 > ("I_WTR1010bg_v01.", "1010", "someWord")
s3 > (“I_WTR1010bg_v01.", "321", "someWord")
這樣的正則該如何寫?
1010只是代表任意的數(shù)字,可能重復(fù)出現(xiàn)幾次,也可能只有一次,但我只需要從右側(cè)出現(xiàn)的第一次分開
作者:
TasteOracle
時(shí)間:
2014-01-19 18:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#filepath=d:\test
import re
f=open(r"d:\test")
lines=f.readlines()
for line in lines:
list1=line.split("=")
k=re.sub(r"(1010)(?!.*1010.*)",r",\1,",list1[1].replace('"',''))
list2=k.strip().split(",")
if not list2[-1]:
del list2[-1]
print list1[0]+">",tuple(list2)
復(fù)制代碼
輸出:
s0 > ('I_WTR', '1010', 'someWord')
s1 > ('I_WTR1010bg_v01.', '1010')
s2 > ('I_WTR1010bg_v01.', '1010', 'someWord')
復(fù)制代碼
作者:
liaozd
時(shí)間:
2014-01-19 18:42
回復(fù)
2#
TasteOracle
謝謝,不過我想的是是從“右側(cè)”“逆向”匹配字符串
作者:
timespace
時(shí)間:
2014-01-19 19:20
本帖最后由 timespace 于 2014-01-19 19:27 編輯
你只是想要結(jié)果上看似從右側(cè)匹配的字符串,實(shí)際中正則引擎或字符串匹配算法沒有從右側(cè)迭代的。有兩種辦法,我傾向第一種,簡(jiǎn)單有效
>>> ss = ['I_WTR1010someWord', 'I_WTR1010bg_v01.1010', 'I_WTR1010bg_v01.1010someWord', 'I_WTR1010bg_v01.321someWord']
>>> for s in ss:
res = re.split('(\d+)', s)
if len(res) > 2:
print ''.join(res[:-2]), res[-2], res[-1]
I_WTR 1010 someWord
I_WTR1010bg_v01. 1010
I_WTR1010bg_v01. 1010 someWord
I_WTR1010bg_v01. 321 someWord
>>> for s in ss:
res = re.search(r'(\d+)\D* $ ', s, re.X)
if res is not None:
print s[:res.start(1)], s[res.start(1):res.end(1)], s[res.end(1):]
I_WTR 1010 someWord
I_WTR1010bg_v01. 1010
I_WTR1010bg_v01. 1010 someWord
I_WTR1010bg_v01. 321 someWord
復(fù)制代碼
作者:
ssfjhh
時(shí)間:
2014-01-20 09:29
本帖最后由 ssfjhh 于 2014-01-20 09:45 編輯
正則里沒有左右,只有行首和行尾。
@timespace
:wink:
In [33]: ss = ['I_WTR1010someWord', 'I_WTR1010bg_v01.1010', 'I_WTR1010bg_v01.1010someWord', 'I_WTR1010bg_v01.321someWord']
In [34]: regex = re.compile('^(?P<first>.*?)(?P<second>\d+)(?P<third>\D*))
In [35]: for s in ss:
...: print(regex.match(s).groups())
...:
('I_WTR', '1010', 'someWord')
('I_WTR1010bg_v01.', '1010', '')
('I_WTR1010bg_v01.', '1010', 'someWord')
('I_WTR1010bg_v01.', '321', 'someWord')
復(fù)制代碼
作者:
ssfjhh
時(shí)間:
2014-01-20 09:31
本帖最后由 ssfjhh 于 2014-01-20 09:39 編輯
如果覺得沒有必要給組命名,這樣也可以。
regex = re.compile('^(.*?)(\d+)(\D*))
復(fù)制代碼
regex = re.compile('^(.*?)(\d+)(\D*)$')
搞不懂,為什么cu里這個(gè)插入代碼的功能<>會(huì)吃掉部分代碼。
作者:
ssfjhh
時(shí)間:
2014-01-20 09:36
s1 > ("I_WTR1010bg_v01.", "1010")
s1的結(jié)果不對(duì),多輸出了一個(gè)空字符串,但是你知道該怎么做了,對(duì)吧。
作者:
我愿為你匍匐一生
時(shí)間:
2024-01-31 08:36
提示:
作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2