我有一個這樣的字符串:的Python:替換字符串中的「啞引號」與「花一」
「可是那位先生,」望着達西,「似乎認爲這個國家是什麼都沒有「。
我想這樣的輸出:
「可是那位先生,」望着達西,「似乎認爲這個國家是什麼都沒有」
同樣,啞單引號應該轉換自己的捲曲等價物。 Read about the typographic rules here if you are interested.
我的猜測是,這已經解決了,但我找不到一個庫或腳本來做到這一點。 SmartyPants(Perl)是做這個的所有庫的母親,並且有一個python port。但它的輸出是HTML實體:“But that gentleman,”
我只想要一個帶有引號的簡單字符串。有任何想法嗎?
更新:
我解決了它的建議通過哈靈頓坎寧安:
- 使用聰明的傢伙,使印刷更正
- 使用
HTMLParser().unescape
到HTML實體轉換回爲Unicode
如果您的輸入文本包含HTML e,則此方法可能存在問題你不希望轉換的實體,但在我的情況下是可以的。更新
的
到底能輸入被信任?
輸入目前只能被信任。該字符串可能包含一個非關閉的雙引號:"But be that gentleman, looking at Dary
。它也可能包含一個非封閉的單引號:'But be that gentleman, looking at Dary
。最後,它可能包含一個意思是撇號的單引號:Don't go there.
我已經實現了一個試圖正確關閉這些丟失的引號的算法,所以這不是問題的一部分。爲了完整起見,這裏是關閉失去報價代碼:
quotationMarkDictionary = [{
'start': '"',
'end': '"',
},{
'start': '「',
'end': '」',
},{
'start': '\'',
'end': '\'',
},{
'start': '‘',
'end': '’'
},{
'start': '(',
'end': ')'
},{
'start': '{',
'end': '}'
},{
'start': '[',
'end': ']'
}]
'''If assumedSentence has quotation marks (single, double, …) and the
number of opening quotation marks is larger than the number of closing
quotation marks, append a closing quotation mark at the end of the
sentence. Likewise, add opening quotation marks to the beginning of the
sentence if there are more closing marks than opening marks.'''
for quotationMark in quotationMarkDictionary:
numberOpenings = assumedSentence['sentence'].count(quotationMark['start'])
numberClosings = assumedSentence['sentence'].count(quotationMark['end'])
# Are the opening and closing marks the same? ('Wrong' marks.) Then just make sure there is an even number of them
if quotationMark['start'] is quotationMark['end'] and numberOpenings % 2 is not 0:
# If sentence starts with this quotation mark, put the new one at the end
if assumedSentence['sentence'].startswith(quotationMark['start']):
assumedSentence['sentence'] += quotationMark['end']
else:
assumedSentence['sentence'] = quotationMark['end'] + assumedSentence['sentence']
elif numberOpenings > numberClosings:
assumedSentence['sentence'] += quotationMark['end']
elif numberOpenings < numberClosings:
assumedSentence['sentence'] = quotationMark['start'] + assumedSentence['sentence']
你到目前爲止試過了什麼?你相信你的投入多少?報價是否總是正確配對? – user1582024
這裏你去 - https://gist.github.com/davidtheclark/5521432 – hashcode55
@ hashcode55這產生HTML實體,而不是純文本。 – bootsmaat