2017-02-15 74 views
1

我需要來標記與此字符串,例如文本:"hello 502world a0.0.3b .1.4 <sub>5</sub>"如何把字符串中的所有數字字符串「NUM」在Python

我希望把它轉化爲:"hello NUMworld aNUMb NUM <sub>5</sub>"

注意除了502之外,0.0.3和.1.4也變成了NUM,也變成了NUM,但是在子裏面我想保持這個數字相同。

文本具有非ASCII字符在它

公告再次,如果數字是子 之間,所以應該留號碼。

這是一個示例文本是從here

+1

你是不是真正的 「標化」,它,因爲輸出不是令牌列表,它只是一個修改過的字符串。所以...只是使用正則表達式來修改字符串。如果你想標記,我的答案可能會有所不同。 – RobertB

+0

我已經給每件事情都付出了努力,但我需要多過濾一下 – Yonlif

回答

2

使用re.sub功能的解決方案:

import re 

s = "hello 502world a0.0.3b .1.4 <sub>5</sub>" 
replaced = re.sub(r'(NUM){2,}', 'NUM', re.sub(r'(?<!<sub>)\.?\d+', 'NUM', s)) 

print(replaced) 

輸出:

hello NUMworld aNUMb NUM <sub>5</sub> 
+0

OP已經改變了忽略「sub」標籤內數字的請求。使正則表達式更難一些。 – RobertB

+0

@RobertB,好吧,我已經更新了我的答案 – RomanPerekhrest

1

一個簡單的正則表達式會做的伎倆:

re.sub(r'(\.?\d+)+', 'NUM', "hello 502world a0.0.3b .1.4") 
#'hello NUMworld aNUMb NUM' 
+0

由於多數民衆贊成在工作 也TY爲編輯 – Yonlif

+0

恨是一個壞消息,但我需要保存號碼是他在 – Yonlif

+0

我不明白您的評論。至少不是它的第二部分。 – DyZ

相關問題