簡體   English   中英

從python unicode字符串中刪除小寫單詞

[英]Remove lowercase words from python unicode string

我有一個德國的unicode字符串像

text = u'Und Wenn die Psychoanalytiker, von den d\xfcmmsten bis zu den kl\xfcgsten, im allgemeinen feindselig auf dieses Buch reagiert haben, aber eher defensiv als aggressiv, so liegt das nat\xfcrlich nicht allein am Inhalt, sondern an dieser Str\xf6mung, die noch gr\xf6\xdfer werden wird, denn die Leute haben immer mehr die Nase voll davon, sich sagen zu lassen "Papa, Mama, \xd6dipus, Kastration, Regression" und haben es satt f\xfcr die Sexualit\xe4t im allgemeinen - und ihre im besonderen - ein wirklich bl\xf6dsinniges Bild angeboten zu bekommen. Die Psychoanalytiker sollten, wie man sagt, die "Massen" ber\xfccksichtigen, die kleinen Massen.'

其中還包含Ü Ö Ä和其他德國特殊字符。 我的目標是得到一個僅包含以大寫字母開頭的單詞的字符串,如下所示:

result = 'Und Wenn Psychoanalytiker Buch Inhalt Str\xf6mung Leute ...'

我努力了

pattern = r'(\b[^A-Z]+\b)'
re.sub(pattern, '', text)

但是對正則表達式是全新的

使用re.sub(...) ,將每個匹配項替換為第二個參數指定的字符串。 我認為您想要的是:

pattern = ur'([A-ZÄÖÜ][^., \t\n]*)'
result = " ".join(re.findall(pattern, text))

更新

這是另一種解決方案。 這個比我的第一個(尤其是德語)要精確一些。

import re

text = u'Und Wenn die Psychoanalytiker, von den d\xfcmmsten bis zu den kl\xfcgsten, im allgemeinen feindselig auf dieses Buch reagiert haben, aber eher defensiv als aggressiv, so liegt das nat\xfcrlich nicht allein am Inhalt, sondern an dieser Str\xf6mung, die noch gr\xf6\xdfer werden wird, denn die Leute haben immer mehr die Nase voll davon, sich sagen zu lassen "Papa, Mama, \xd6dipus, Kastration, Regression" und haben es satt f\xfcr die Sexualit\xe4t im allgemeinen - und ihre im besonderen - ein wirklich bl\xf6dsinniges Bild angeboten zu bekommen. Die Psychoanalytiker sollten, wie man sagt, die "Massen" ber\xfccksichtigen, die kleinen Massen.'

pattern = ur'[A-ZÄÖÜ][a-zäöüß-]*'
result = " ".join(re.findall(pattern, text))

說明:

  • [A-ZÄÖÜ]匹配A和Z之間的單個字符或Ä,Ö或Ü字符。 此字符后跟:

  • [a-zäöüß]+可以在a和z之間或字符ä,ö,ü或ß中匹配一個或多個字符。

  • re.findall(...)匹配所有出現的模式,並返回匹配列表。

  • " ".join(...)返回以空格分隔的字符串,該字符串是列表中單詞的串聯。

字符類[^AZ]將排除從A到Z的所有大寫字母,但不排除大寫變音符號-或不在該范圍內的其他大寫unicode字符。

您可以使用re.findall將字符串拆分成單個單詞,然后檢查它們是否以大寫字母開頭:

>>> import re
>>> text = u'Und Wenn die Psychoanalytiker, von den d\xfcmmsten bis zu den kl\xfcgsten, im allgemeinen feindselig auf dieses Buch reagiert haben, aber eher defensiv als aggressiv, so liegt das nat\xfcrlich nicht allein am Inhalt, sondern an dieser Str\xf6mung, die noch gr\xf6\xdfer werden wird, denn die Leute haben immer mehr die Nase voll davon, sich sagen zu lassen "Papa, Mama, \xd6dipus, Kastration, Regression" und haben es satt f\xfcr die Sexualit\xe4t im allgemeinen - und ihre im besonderen - ein wirklich bl\xf6dsinniges Bild angeboten zu bekommen. Die Psychoanalytiker sollten, wie man sagt, die "Massen" ber\xfccksichtigen, die kleinen Massen.'
>>> [w for w in re.findall(r"\b\w+\b", text, re.U) if w[0].isupper()]
[u'Und', u'Wenn', u'Psychoanalytiker', u'Buch', u'Inhalt', u'Str\xf6mung', u'Leute', u'Nase', u'Papa', u'Mama', u'\xd6dipus', u'Kastration', u'Regression', u'Sexualit\xe4t', u'Bild', u'Die', u'Psychoanalytiker', u'Massen', u'Massen']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM