2017-03-06 3 views
2

데이터 = 나는정규식 여러 번

같은 데이터 "우리 (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를 제거하는 'A'내가 같은 작업 4 번을해야한다. 동일한 숫자도 마찬가지입니다.

거기에 더 나은 정규식 버전이 동일하게 할 수 있습니까 ??

+0

내가 원하는 (95 예, 23)는 –

+0

모든 격리 된 문자를 제거 할 텍스트를 설명하는 규칙 (예를 들어, i) 및 순수 숫자의 집합을 제공하십시오 제거. 문제는 내가 먼저 문자로 시도했지만 한 번에 내 정규 표현식은 'a'를 한 번만 제거하고 나머지는 변경하지 않습니다. 하나의 패스에서 이러한 고립 된 'a'현상을 모두 제거하고 싶습니다. –

+0

[[\ b (? : \ d + \ b \ s | ([az] + \ s +) \ 1+] '] (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