2015-11-22 24 views
3

因此,我使用NVDA,許多人使用的免費屏幕閱讀器和一個語音合成器。我正在構建它需要的插件的修改版本庫,以及可以包含python可接受的正則表達式的字典以及標準字替換操作。 我的問題是,我不知道如何設計一個正則表達式,它將在大寫字母之間放置一個空格,例如在ANM中,合成器將它表示爲一個單詞而不是像它應該拼寫的那樣。 我不知道足夠的python手動編寫這個東西的插件,我只使用regexp這種事情。我知道正則表達式的基本知識,一般的實現,你可以通過在55分鐘內使用「正則表達式」來找到它。 我希望它做這樣的事情。nvda regexp把所有大寫字母之間的空格?

Input: ANM 
Output: A N M 

還與方式這一講話合成器的作品,我可能與EH更換一次,這將使這一點。

Input: ANM 
Output: Eh N M 

如果可能的話,你們能否給我一個正則表達式?不,我不認爲我可以在循環中編譯它們,因爲我沒有編寫python。

回答

3

這應該做的大寫字母的伎倆,它使用?=向前看下一個大寫字母沒有「吃起來」:

>>> import re 
>>> re.sub("([A-Z])(?=[A-Z])", r"\1 ", "ABC thIs iS XYZ a Test") 
'A B C thIs iS X Y Z a Test' 

如果你有很多的替代品之作,它可能是最簡單的把它們變成一個單一變量:

replacements = [("A", "eh"), ("B", "bee"), ("X", "ex")] 
result = re.sub("([A-Z])(?=[A-Z])", r"\1 ", "ABC thIs iS XYZX. A Xylophone") 
for source, dest in replacements: 
    result = re.sub("("+source+r")(?=\W)" , dest, result) 
print(result) 

輸出:

eh bee C thIs iS ex Y Z ex. eh Xylophone 

我在「替換」代碼中構建正則表達式,以正確處理句子末尾的大寫單詞和獨立首字母。如果您想避免更換獨立的'A'和'eh',那麼@ fjarri的答案中提到的更高級的正則表達式替換函數就是要走的路。

+0

好,是這本詞典的工作方式,我無法確切原蟒蛇喂到它,希望我能...我會盡力在這裏提到的正則表達式。我不能在同一段文字上多次使用同一詞典條目,但是我可以在同一段文字上使用多個詞典條目。所以也許我可以分層然後做這件事。呃是我需要替換的唯一一個,因爲A產生短呃聲音。我可以輕鬆地做到這一點,就像這樣。 條目:\ bA \ b 替換:eh –

3

雖然@加拉克斯的解決方案肯定的作品,它可能是更容易,如果您使用的比賽回調(這樣你就不會更換任何獨立的資本)來執行縮寫的進一步處理:

import re 

s = "This is a normal sentence featuring an abbreviation ANM. One, two, three." 

def process_abbreviation(match_object): 
    spaced = ' '.join(match_object.group(1)) 
    return spaced.replace('A', 'Eh') 

print(re.sub("([A-Z]{2,})", process_abbreviation, s)) 
+1

是的正則表達式回調是一個更好的方法來做到這一點。我添加了一個解決辦法,以防止大寫單詞被影響,我不知道如果我的代碼處理standalong首都的事實是錯誤或功能雖然;) – Galax

+0

因此,它似乎與所使用的正則表達式的一個,就是那個去「([AZ])(?= [AZ])」,我的合成器將正確地取代東西。所以,BAC,例如,使蜜蜂的聲音看到,而不是回來。但是,ANM,我使用的原始的,做了他們。那麼是不是有一個單獨的,這是一個修改這個將取代A與Eh,只有它,如果它是減值的一部分,所以如果我說 一個傢伙是一個傢伙。 輸出不會 呃傢伙是一個花花公子 但如果我說 ANM 輸出應該 嗯爲N×M 我沒有真正看到它在屏幕上,它被直接傳遞給語音合成器。 –

0

沒關係,發現答案。按照一定的順序使用一系列正則表達式,我就可以開始工作。謝謝你們,你們幫助我形成了基礎,你們感激不盡。

相關問題