簡體   English   中英

刪除所有數字,除了使用 python regex 組合成字符串的數字

[英]Remove all numbers except for the ones combined to string using python regex

嘗試使用正則表達式函數刪除單詞、空格、特殊字符和數字,但不刪除與單詞/字符串組合的那個。 例如

ORIGIN
    1 malwmrllp1 lallalwgpd paaafvnghl cgshlvealy lvcgergffy tpktrreaed
    61 lqvgqvelgg gpgagslqpl alegslqkrg iveqcctsic slyqlenycn

//

\W+ 刪除包括 1 在內的所有數字 malwmrll1

import re

text_file = open('mytext.txt').read()
new_txt = re.sub('[\\b\\d+\\b\s*$+\sORIGIN$\W+]', '', text_file)

print(new_txt, len(new_txt))

我的輸出是:

malwmrllplallalwgpdpaaafvnghlcgshlvealylvcgergffytpktrreaedlqvgqvelgggpgagslqplalegslqkrgiveqcctsicslyqlenycn 109

所需的輸出應該是: malwmrll1plallalwgpdpaaafvnghlcgshlvealylvcgergffytpktrreaedlqvgqvelgggpgagslqplalegslqkrgiveqcctsicslyqlenycn 110

對,根據您想要的結果是否顯示下划線,嘗試使用re.findall和原始字符串表示法。 您當前使用了一個沒有意義的字符類:


\b(?!(?:ORIGIN|[_\d]+)\b)\w+

查看在線演示


  • \b - 字邊界;
  • (?!(?:ORIGIN|[_\d]+)\b) - 帶有嵌套非捕獲組的負前瞻,以匹配尾隨字邊界之前的ORIGIN或 1+ 下划線/數字組合;
  • \w+ - 1+ 個單詞字符。

import re
  
text_file = """ORIGIN
    1 malwmrllp1 lallalwgpd paaafvnghl cgshlvealy lvcgergffy tpktrreaed
    61 lqvgqvelgg gpgagslqpl alegslqkrg iveqcctsic slyqlenycn

//"""

new_txt=''.join(re.findall(r'\b(?!(?:ORIGIN|[_\d]+)\b)\w+', text_file))    
print(new_txt, len(new_txt))

印刷:

malwmrllp1lallalwgpdpaaafvnghlcgshlvealylvcgergffytpktrreaedlqvgqvelgggpgagslqplalegslqkrgiveqcctsicslyqlenycn 110

為此使用 RE 是一項有趣的學術練習,但擴展功能充滿危險,除非您非常熟悉該技術。

這個答案可能看起來很冗長,但您應該能夠看到擴展它是多么容易,以便可以排除或包含其他標記/模式。 它也很容易維護,因為在試圖弄清楚 RE 的工作原理時,任何其他必須修改代碼的人都不會偏頭痛。

FILENAME = 'mytext.txt'

def keep(t):
    if t.isdigit() or t == 'ORIGIN' or t == '//':
        return False
    return True

with open(FILENAME) as f:
    new_txt = ''.join(filter(keep, f.read().split()))
    print(new_txt, len(new_txt))

輸出:

malwmrllp1lallalwgpdpaaafvnghlcgshlvealylvcgergffytpktrreaedlqvgqvelgggpgagslqplalegslqkrgiveqcctsicslyqlenycn 110

另一個想法:

new_txt = re.sub('[\\W_]+|\\b(?:\\d+|ORIGIN)\\b', '', text_file)

去除單詞邊界之間的所有非單詞字符+下划線或數字/“ORIGIN”。

在 tio.run 上查看這個演示(正則表達式非常基礎,在 regex101 進行解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM