[英]Find characters within substring using Python regex
我有以下列表:
l = ['(PREDIR )?NAME SUFTYP|PREDIR NAME( SUFTYP)?', '(PREDIR )?NAME|PREDIR NAME', '(PREDIR )?PRETYP NAME SUFTYP( SUFDIR)?|PREDIR (PRETYP )?NAME( SUFTYP)? SUFDIR', '(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME', 'NAME SUFTYP( SUFDIR)?|NAME( SUFTYP)? SUFDIR', 'NAME SUFTYP|NAME( SUFTYP)?', 'NAME|NAME', 'PRETYP NAME ( SUFDIR)?|(PRETYP )?NAME SUFDIR']
我想找到包含的物品?
僅在|
一側 ,只更換含有的一面?
。
具體來說,我希望我希望l
的項目替換為以下內容:
'(PREDIR )?NAME|PREDIR NAME'
- > '(PREDIR )?NAME'
'(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME'
- > '(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME'
'NAME SUFTYP|NAME( SUFTYP)?'
- > 'NAME( SUFTYP)?'
我能想到這樣做的唯一方法是通過迭代過程來檢查?
首先是左側而不是右側,然后是相反的。
以下不起作用。
for i in l:
i = re.sub(r'(.*?\?.*?)(\|.*?[^?].*?)',r'\1',i)
試試這個:
l = ['(PREDIR )?NAME SUFTYP|PREDIR NAME( SUFTYP)?', '(PREDIR )?NAME|PREDIR NAME',
'(PREDIR )?PRETYP NAME SUFTYP( SUFDIR)?|PREDIR (PRETYP )?NAME( SUFTYP)? SUFDIR',
'(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME',
'NAME SUFTYP( SUFDIR)?|NAME( SUFTYP)? SUFDIR', 'NAME SUFTYP|NAME( SUFTYP)?',
'NAME|NAME', 'PRETYP NAME ( SUFDIR)?|(PRETYP )?NAME SUFDIR']
import re
l2 = []
for elem in l:
inner = re.split("\|", elem);
left = '?' in inner[0]
right = '?' in inner[1]
if (left and right) or not (left or right):
# Either both side of `|` have `?` or none of the sides have `?`
l2.append(elem)
elif left:
l2.append(inner[0])
else:
l2.append(inner[1])
print l2
所以,如果我理解你,你想通過|
拆分字符串 ,如果只有一個部分有?
在它,然后返回,否則返回字符串? 我不確定正則表達式是否值得頭痛:為什么不呢
def fix(s):
has_qmark = [part for part in s.split("|") if '?' in part]
return has_qmark[0] if len(has_qmark) == 1 else s
代替? 它實際上是英文的。
>>> fix('(PREDIR )?NAME|PREDIR NAME')
'(PREDIR )?NAME'
>>> fix('(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME')
'(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME'
>>> fix('NAME SUFTYP|NAME( SUFTYP)?')
'NAME( SUFTYP)?'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.