2017-03-06 5 views
2

データを削除するには=私は正規表現は、Pythonで文字と数字の孤立出現を何度

「私たちの96 35の研究室がAAAAカナマイシンを追加ポンドの43 65 66 43リットルほどを準備する中、様々な人々」のようなデータを持っています

私は「私たちの研究室では、様々な人々が43リットルを準備したりポンドのようになるカナマイシンを追加する」のようにそれを印刷したい

注意してください:43リットルを削除すべきではありません。それは数の後のテキストを持っているので、それは孤立していないからです。

は、私は、以下の方法を使用してみました: -

data = re.sub('\s[a-z]\s', ' ', data) 
data = re.sub('\s[a-z]\s', ' ', data) 
data = re.sub('\s[a-z]\s', ' ', data) 
data = re.sub('\s[a-z]\s', ' ', data) 

分離4を削除するには「」私は、同じタスクを4回行う必要があります。孤立した数字も同じです。

もっと良い正規表現のバージョンが同じことを行うことができますか?

+0

私が欲しい(例えばA、I)と純粋な数字(例:23、95)あなたは –

+0

すべての孤立した文字を削除したいテキストを記述したルールのセットを提供してください削除する。問題は、私は最初に文字で試しているが、私の正規表現は、一回のパスで 'a'の1つだけのオカレンスを削除し、残りの部分は変更しません。そのような孤立した「a」の出現をすべて1つのパスで削除したい –

+0

これを行うためのより正確な方法があります:{'\ b(?:\ d + \ b \ s |([az] + \ s +)\ '](https://regex101.com/r/M40Lie/2) – revo

答えて

1
  • 私は「言葉」(他の文字に付着していない)されている数字だけを交換する\b(ワード境界)を使用します。削除する文字列が文字列の先頭または末尾にある場合、前/後のスペースを検索すると一致しないことがあります。
  • 、1つの以上のスペースがあるだろう、私は交換後、単一の文字(あなたの試み与え、あなたはすべての単一の文字を削除したい)

を隔離するために同じ\bを使用しますので、私は試合後、それを消費。コード:

import re 

s = "various people in our 96 35 lab will a a a a prepare 43 65 66 43liter or so of lb add kanamycin" 

print(re.sub(r"\b\d+\b *|\b[a-z]\b *","",s)) 

結果:

print(re.sub(r"\b(\d+|[a-z])\b *","",s)) 
+0

ありがとう、それは魅力のように働いた –

+0

あなたが最も好きな答えを受け入れてくださいhttp://stackoverflow.com/help/someone-answers –

0

はあなたが好きそれを持つことができます:私たちは、開始&終わりからグループでさらに上の正規表現を因数分解することができます

various people in our lab will prepare 43liter or so of lb add kanamycin 

は同じです:

\b(?:\d+|[a-z])\b\s+ 

a demo on regex101.comを参照してください。 Python


これは、次のとおりです。

import re 

string = "various people in our 96 35 lab will a a a a prepare 43 65 66 43liter or so of lb add kanamycin" 
rx = re.compile(r'\b(?:\d+|[a-z])\b\s+') 

new_string = rx.sub('', string) 
print(new_string) 
# various people in our lab will prepare 43liter or so of lb add kanamycin 
関連する問題