前提:已知ii,u和x都是未知内容。
请教如何从字符串 <uuuu<uuiixx>xxxxxx>
如何摘除中间(也就是距离ii最近,套嵌最深的)<uuiixx>
的字符串得到<uuuuxxxxxx>
谢谢各位大佬啦,因为python的re正则都是贪婪模式,非贪婪的?只能找到后面最近的,不太会整
前提:已知ii,u和x都是未知内容。
请教如何从字符串 <uuuu<uuiixx>xxxxxx>
如何摘除中间(也就是距离ii最近,套嵌最深的)<uuiixx>
的字符串得到<uuuuxxxxxx>
谢谢各位大佬啦,因为python的re正则都是贪婪模式,非贪婪的?只能找到后面最近的,不太会整
(<[^<]+)<[^>]+>(.*)
谢谢大佬,不过这个好像不太ok?, 这里面似乎没有体现出ii的寻找匹配呀?
你跟我之前一樣,對問號的理解有誤,我也是用了多年才明白。
問號有兩種用法:
壹個或零個,比如「lalao?」,那就匹配lala跟lalao
非貪婪,這個要緊挨星號或加號,比如「<.+?ii.+?>」,這個可能就是你想要的答案
但是,不同的文本處理軟件,用的是不同的正則規範,比如vim的非貪婪就與衆不同,因為你不用vim我就不說了。
谢谢呀,这种我试过,但是你看在python里面
` import re
a = “<uuuxuxxxxx>”
re.sub(r"<.+?ii.+?>", “”, a) `
结果是这样的:
'uxxxxx>'
它对左边似乎还是贪婪的。
我上面那个是匹配巢式的,
(.*)<[^<]+ii[^>]+>(.*)
匹配ii用这个,注意这两个都是靠分组来提取的
请教一下,什么是“巢式括号”啊?搜了一下,第一个结果就是这个帖子
可能是长得跟巢上面那三个笔画一样哈哈哈哈哈哈~
不需要提取,只要刪掉中間部份:
<[^<]+ii[^>]+>
可以试试:
其中 .*?
表示非贪婪匹配所有的字符。
import re
for astr in (
'<uuuu<uuiixx>xxxxxx>',
'<abc>',
'<uuuu<uuixx>xxxxxx>'
):
asub = re.sub(r'(<.*?)(<.*?ii.*?>)(.*>)', r'\1\3', astr)
print(astr, asub)
output:
<uuuu<uuiixx>xxxxxx> <uuuuxxxxxx>
<abc> <abc>
<uuuu<uuixx>xxxxxx> <uuuu<uuixx>xxxxxx>
r’<.?ii.?>‘, r’’
刪掉中間的就可以了。
就是括号外面套括号哈
nested 翻译成嵌套比较好
我还以为巢式是 巢字头上的 巛,还想着挺形象,哈哈哈哈
也可以說成「套娃」,比如俄羅斯三套娃。