我的用戶接入像正則表達式可以找到重複的字符嗎?
________________________
************************
------------------------
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
以格式的文件序列(不要問我關於我的用戶!)。當顯示片段時,它看起來很糟糕。我如何刪除任何字符的重複?我可以添加個人過濾器,但它將是一個不斷的貓和老鼠遊戲。
正則表達式可以過濾這些嗎?
我的用戶接入像正則表達式可以找到重複的字符嗎?
________________________
************************
------------------------
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
以格式的文件序列(不要問我關於我的用戶!)。當顯示片段時,它看起來很糟糕。我如何刪除任何字符的重複?我可以添加個人過濾器,但它將是一個不斷的貓和老鼠遊戲。
正則表達式可以過濾這些嗎?
嘗試類似:
(.)\1{5,}
的任何字符,然後5個或更多該字符相匹配。如果你的語言使用正則表達式模式的字符串,請記住要逃避\ \!
可以消除任何一個字符的重複一個簡單的正則表達式像(.)\1+
然而,這將趕上合法用途爲好,如在他們的拼寫(氣球,拼寫了一倍字母的單詞, 井等)。
因此,您可能希望將表達式限制爲某些不允許的字符,畢竟儘可能保持通用,以便不必隨時對其進行修改,因爲用戶可以找到新字符使用。
一個可能的解決辦法是不允許重複的非字母和非數字字符:
([^A-Za-z0-9])\1+
但是,即使這不是一個徹底解決所有的情況下,如一些用戶可能實際上決定使用實際的字母序列作爲分隔符:
ZZZZZZZZZZZZZZZZZZZZZZ
BBBBBBBBBBBBBBBBBBBBBB
ZZZZZZZZZZZZZZZZZZZZZZ
爲了不讓這一點,並允許一些重複的非字母字符合法用途(如省略號:...)的好處是,你可以將字符重複限制在最大限度通過使用正則表達式,其語法爲(<pattern>)\1{min, max}
,如下所示:(.)\1{4,}
匹配違規字符序列,最小長度爲4,未指定最大值。
在蟒蛇(但邏輯是不管語言的相同):
>>> import re
>>> text = '''
... This is some text
... ________________________
... This some more
... ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
... Truly the last line
... '''
>>> print re.sub(r'[_♥]{2,}', '', text) #this is the core (regexp)
This is some text
This some more
Truly the last line
這樣做,你有什麼替代一些控制並沒有什麼好處(例如,你可能希望不要替代.
因爲它可以像This is still to do...
部分註釋
編輯:
如果重複始終爲「線」,你可以添加新行ç haracters你的表達:
text = '''
This is some text
________________________
This some more
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥
Truly the last line
But this is not to be changed: ♥♥♥
'''
>>> print re.sub(r'\n[_♥]{2,}\n', '\n', text)
This is some text
This some more
Truly the last line
But this is not to be changed: ♥♥♥
HTH
+1,但我會用'[A--ZA Z0-9 ^]'的',而不是.' –