我有奇怪的项目列表和列表,|
作为分隔符,[[ ]]
作为括号。它看起来像这样:
| item1 | item2 | item3 | Ulist1[[ | item4 | item5 | Ulist2[[ | item6 | item7 ]] | item8 ]] | item9 | list3[[ | item10 | item11 | item12 ]] | item13 | item14
我希望使用RegEx匹配名为Ulist*
的列表中的项目(项目4-8),并将其替换为Uitem*
。结果应如下所示:
| item1 | item2 | item3 | Ulist1[[ | Uitem4 | Uitem5 | Ulist2[[ | Uitem6 | Uitem7 ]] | Uitem8 ]] | item9 | list3[[ | item10 | item11 | item12 ]] | item13 | item14
我尝试了几乎所有关于RegEx的知识,但是我没有发现任何RegEx与Ulist中的每个项目相匹配。我目前的RegEx:
/Ulist(\d+)\[\[(\s*(\|\s*[^\s\|]*)*\s*)*\]\]/i
有什么问题?我是RegEx的初学者。
它是在Python 2.7中,特别是我的代码是:
def fixDirtyLists(self, text):
text = textlib.replaceExcept(text, r'Ulist(\d+)\[\[(\s*(\|\s*[^\s\|]*)*\s*)*\]\]', r'Ulist\1[[ U\3 ]]', '', site=self.site)
return text
text
得到那个奇怪的列表,textlib
用RegEx替换RegEx。根本不复杂。
答案 0 :(得分:1)
如果您安装PyPi regex module(使用Python 2.7.9+,只需item
文件夹中的Uitem
即可完成,您将能够匹配嵌套的方括号。您可以匹配所需的字符串,将(Ulist\d+)(\[\[(?>[^][]|](?!])|\[(?!\[)|(?2))*]])
^-Group1-^^-----------Group2--------------------^
替换为(Ulist\d+)
仅在这些子字符串中。
模式(参见demo,注意PyPi正则表达式递归类似于PCRE):
Ulist
一个简短的解释:(\[\[(?>[^][]|](?!])|\[(?!\[)|(?2))*]])
是第1组,其匹配字面词[[
,后跟一个或多个数字,后跟]]
,匹配以>>> import regex
>>> s = "| item1 | item2 | item3 | Ulist1[[ | item4 | item5 | Ulist2[[ | item6 | item7 ]] | item8 ]] | item9 | list3[[ | item10 | item11 | item12 ]] | item13 | item14"
>>> pat = r'(Ulist\d+)(\[\[(?>[^][]|](?!])|\[(?!\[)|(?2))*]])'
>>> res = regex.sub(pat, lambda m: m.group(1) + m.group(2).replace("item", "Uitem"), s)
>>> print(res)
| item1 | item2 | item3 | Ulist1[[ | Uitem4 | Uitem5 | Ulist2[[ | Uitem6 | Uitem7 ]] | Uitem8 ]] | item9 | list3[[ | item10 | item11 | item12 ]] | item13 | item14
开头的子字符串相应的list
。
Python代码:
Ulist
要避免修改def repl(m):
return "".join([x.replace("item", "Uitem") if not x.startswith("list") else x for x in regex.split(r'\blist\d*\[{2}[^\]]*(?:](?!])[^\]]*)*]]', m.group(0))])
内的regex.sub
,请使用
res = regex.sub(pat, repl, s)
并将phantom = require 'phantom'
parameters = {
loadimages: '--load-images=no',
websecurity: '--web-security=no',
ignoresslerrors: '--ignore-ssl-errors=yes',
proxy: '--proxy=10.0.1.235:8118',
}
urls = {
checktor: "https://check.torproject.org/",
google: "https://google.com",
}
phantom.create parameters.websecurity, parameters.proxy, (ph) ->
ph.createPage (page) ->
page.open urls.checktor, (status) ->
console.log "page opened? ", status
page.evaluate (-> document.title), (result) ->
console.log 'Page title is ' + result
ph.exit()
替换为
XMPPStream.h