2016-06-21 5 views
1

여기에 문제가되는 부분이 있습니다.문자열 문자를 서로에 포함 된 문자로 바꾸기

if any(char in word for char in ["a", "ā", "e", "ē", "i", "ī", "u", "ū", "o", "ai", "ei", "ui"]): 
for ch in ["a", "ā", "e", "ē", "i", "ī", "u", "ū", "o", "ai", "ei", "ui"]: 
    if ch in word: 
     word = word.replace(ch, ch + "p" + ch) 

이것은 조금 이상하게 보일지 모르지만 라트비아어의 번역자에게는 속어입니다. 모음을 찾는 것이 훨씬 효율적으로 수행 될 수 있지만 내 문제는 ei가있는 경우 예를 들어 "e"에서 "i"를 가져 오지 못하게하려는 것입니다. 지금은 예를 들어 "aiza"을 가져오고 "aipaizapa" 대신 "apaipaipizapa"을 제공합니다. 희망이 너무 많이 요청하지 않은, 영어는 내 원주민이 아니므로 효과적인 검색 용어를 공식화하는 방법을 알지 못했습니다. 미리 감사드립니다.

편집 : 나는 내 문제에 대해 매우 저조한 말을하는 것이 두렵다. 내가 원하는 건 입니다. 입니다.

list = ["a", "b", "ay", "by"] 
state = input("Type a, b, ay or by") 
for char in list 
    if char in state 
     state = state.replace(char, k) 
print state 

그래서 지금, 입력이는 주식을 줄 것이다 또는 하지만 난 그것을 하나의 K을 제공해야합니다. 더 큰 값의 일부인 경우 더 작은 값을 무시하고 어떻게 Python 3을 달성합니까?

+0

그래하지만 여전히 그들을 발견 새로운 "eipei"또는 무엇이든. 나는 내가 내부에 있다면 대체하지 말 할 방법이 필요해. – ItsMeOK

+0

@jonrsharpe 좀 더 이해하기 쉬운 코드 비트를 깨뜨릴 수 있습니까? 미안하지만 나는 파이썬에서 특히 신경 쓰이는 초보자이다. – ItsMeOK

+0

나는 네가 원한 것을 이해했다고 생각한다. 문자열에서 두 개의 "일치"가 겹치지 않고 모든 문자가 한 번에 대체되므로 정규식의 "결과"가 다시 대체 될 수는 없으므로 Regex에서 처리합니다. –

답변

2

|을 사용하여 정규 표현식에 이러한 문자를 결합 할 수 있습니다. 멀티 문자 부분을 먼저 정렬해야합니다. 따라서 일치 항목이 선호됩니다 (즉, a 대신 ai과 일치하고 i 대신). 그런 다음 콜백 기능을 re.sub를 사용

>>> chars = ["a", "ā", "e", "ē", "i", "ī", "u", "ū", "o", "ai", "ei", "ui"] 
>>> s = "aiza" 
>>> p = "|".join(sorted(chars, key=len, reverse=True)) 
>>> print(p) 
ā|ē|ī|ū|ai|ei|ui|a|e|i|u|o 
>>> re.sub(p, lambda m: "{0}p{0}".format(m.group()), s) 
'aipaizapa' 

정규 표현식 일치가 겹치지 있으며,이 모든 한 번에 문자, 다른 후 하나 하나, 다른 문자의 일부가되지 않습니다 문자를 대체하기 때문에 문제.

0

코드는 python3 아니지만, 내가 두 번째 예에서 이해 것과,이 시도 : 작은 사람을 통해 내가 긴 사람을 대체하고 실행하면

list1 = ["a", "b", "ay", "by"] 
state = input("Type a, b, ay or by: ") 

for char in state: 
    if char in list1: 
     print("k") 
     break 
관련 문제