2012-06-09 5 views
0

일부 텍스트가 있습니다. 여기에서 볼 수 있습니다.쉼표 또는 공백으로 된 텍스트 찾기

result1 = [('aqua', 'fem nom/voc pl'), ('aqua', 'fem dat sg'), ('aqua', 'fem gen sg')] 
result2 = [('equus#1', 'masc abl sg'), ('equus#1', 'masc dat sg')] 

을 두 변형 될 수있다 여기에서 보는 바와 같이 :

  1. (anytext) (워드-I-필요) \ t 여기
    str1 = '{5723647 9 aqua\t \tfem nom/voc pl}{5723647 9 aqua\t \tfem dat sg}{5723647 9 aqua\t \tfem gen sg}' 
    str2 = '{27224035 2 equo_,equus#1\t \tmasc abl sg}{27224035 2 equo_,equus#1\t \tmasc dat sg}' 
    

    내가 얻고 싶은 것입니다 \ t (form-I-need).
  2. (anytext) (단어 - 필요) \ t \ t (양식 - 필요).

    [('aqua', 'fem nom/voc pl'), ('aqua', 'fem dat sg'), ('aqua', 'fem gen sg')] 
    [('equo_,equus#1', 'masc abl sg'), ('equo_,equus#1', 'masc dat sg')] 
    

    그러나, 두 번째는해야합니다 :

    여기
    pattern = re.compile(r'\d* \d*(?:,|)(.*?)\t \t(.*?)}') 
    

    내가 무엇을 얻을 수 있습니다 : 여기

내가 무엇을 시도했다 정규식

[('equus#1', 'masc abl sg'), ('equus#1', 'masc dat sg')] 

무엇 조언 해 줄래? 감사!

+0

무엇입니까이 경우의 예상 출력 :'23467 23 sfhd, 자유 소프트웨어 재단 \ t \ tydfjskdfk' – nhahtdh

+0

@nhahtdh FDS :이 수 그런 끈이 아니야. – ghostmansd

답변

3
pattern = re.compile(r"\{(?:.*?,|.*?)(\S+)\t \t(.*?)\}") 
+0

컴파일 한 후에 패턴을 사용하는 것과 같은 좀 더 강력한 대답을 기꺼이 추가 할 의향이 있습니까? – octopusgrabbus

1

이것은 소수의 의견이지만 정규 표현식을 사용하여 작성하기 쉽고 나머지는 Python을 사용하여 작성하기 쉬운 정규식 로직을 사용하지 않는 이유는 무엇입니까? 무엇보다도, 그것은 변화에 더 강력합니다. 이 같은

>>> import re 
>>> 
>>> str1 = '{5723647 9 aqua\t \tfem nom/voc pl}{5723647 9 aqua\t \tfem dat sg}{5723647 9 aqua\t \tfem gen sg}' 
>>> str2 = '{27224035 2 equo_,equus#1\t \tmasc abl sg}{27224035 2 equo_,equus#1\t \tmasc dat sg}' 
>>> 
>>> pattern = re.compile("{([^\}]*)}") 
>>> 
>>> def extract(part): 
...  ps = part.split() 
...  word = ps[2].split(',')[-1] 
...  form = ' '.join(ps[3:]) 
...  return word, form 
... 
>>> for s in str1, str2: 
...  for entry in re.findall(pattern, s): 
...   print extract(entry) 
... 
('aqua', 'fem nom/voc pl') 
('aqua', 'fem dat sg') 
('aqua', 'fem gen sg') 
('equus#1', 'masc abl sg') 
('equus#1', 'masc dat sg') 
+0

텍스트는 약 100MB이며 약 970000 줄이 포함되어 있습니다. 너무 길 수 있습니다. :-) – ghostmansd

+0

다른 옵션 (같은 줄을 따라)은 정규식을 사용하여 여러 패스로 나누는 것입니다. –

0

뭔가 같은 무언가가 작동 할 수

([^{\s,]*)\t \t([^}]*) 
+0

컴파일 할 필요없이 변수에 할당 할 수 없습니다. 예를 보여 주시겠습니까? – octopusgrabbus

관련 문제