2017-02-15 19 views
1
で「NUM」

私は、たとえば、この文字列を使用してテキストをトークン化する必要があります。"hello 502world a0.0.3b .1.4 <sub>5</sub>"どのように文字列に文字列内のすべての数字を回すためのPython

私はそれを有効にする:"hello NUMworld aNUMb NUM <sub>5</sub>"

ていることに注意してください0.0.3と.1.4もNUMに変わる502に加えてNUMに変わりますが、サブの内部では同じ数にしたいと思います。

テキストは番号がサブ の間にある場合は、再度ので、それは数にとどまるべきであること、それ

お知らせに非ASCII文字を持っています。

これは、テキストがhereの例です。単純な正規表現は、トリックを行うだろう

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

あなたが本当にそれを "トークン化" されていません出力はトークンのリストではないため、変更された文字列です。だから...正規表現を使って文字列を修正するだけです。トークン化したい場合、私の答えは異なるかもしれません。 – RobertB

+0

私はすでにすべてのことをtoknaizedしていますが、少しフィルタリングする必要があります – Yonlif

答えて

2

ソリューション

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

OPは "sub"タグ内の数字を無視するリクエストを変更しました。正規表現を少し難しくします。 – RobertB

+0

@RobertB、[OK]を、私は編集 – RomanPerekhrest

1

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) 

出力:re.sub機能を使用して

+0

おかげで私の答えを更新しましたが、私は番号を保存する必要があるが、彼は私があなたのコメントを理解していない – Yonlif

+0

憎しみをがっかりさのために働いて もTYザッツ – Yonlif

+0

であるです。少なくとも2番目の部分ではありません。 – DyZ