如何不分割变音符?

问题描述

我想使用以下功能从文本中提取单词并将它们放入列表中

list = re.sub("[^\w]"," ",'text hier einfügen').split()

列表的输出为:

['text','hier','einfügen']

这很好。但是,一旦我在代码添加了iso:

# -*- coding: iso-8859-1 -*-

...它不再起作用。输出变为:

['text','hier','einf','gen']

如何避免这种情况?我需要这种iso编码,因为在HTML中,否则将无法正确打印德语文本。

其他信息(更多详细信息):

我有这样的表格:

<form action="text_ch.py" method="post" name="search"><textarea cols="50" name="comment" rows="10">Text hier einfügen...</textarea>
<input type="submit" value="Analyse"><p></p>
</form>

然后是python文件

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

import cgi
import re

form = cgi.FieldStorage()
user_text =  form.getvalue('comment')
user_text_output = user_text
wordList = re.sub("[^\w]",user_text).split()
wordList = [x.lower() for x in wordList]

# HTML Ausgabe

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Title</title>'
print '<Meta charset=\"utf-8\"/>'
print '</head>'
print '<body>'
print '<div style=\"width: 40%; margin: auto; border: 1px solid #333;Box-shadow: 8px 8px 5px #444;padding: 8px 12px; font-family: Arial,Helvetica,sans-serif; font-size:medium; line-height:1.5;\">'

print wordList
print "</div>"
print '</body>'
print '</html>'

HMTL中的输出为:

['text','hier','einf','gen']

解决方法

不要使用[^\w](任何空白字符),而应使用[\s](任何空白字符)。

此外,使用方法re.split()代替re.sub().split()。这样就更简单了。

import re

lst = re.split("[\s]",'text hier einfügen')
['text','hier','einfügen']

如果您担心捕获<>/等命令字符,那么仅在正则表达式中手动列出它们可能是最简单的-只有一个ASCII内的有效HTML控制字符的数量有限。