提问者:小点点

findall希腊文本中所有连字符的单词


我有一个希腊文本,每次有换行符时都用连字符。例如:

Καλημέρα ο καιρός είναι απίστευτος σή-
μερα και θα πάμε εκδρομή. Πρέπει να ετοι-
μασουμε πράγματα για πικ-νικ.

仅当插入换行符以便删除换行符并将换行符“\n”移动到非语法化单词的末尾时,我才需要查找字符“-”之间的单词边界。我的结果应该是这样的:

Καλημέρα ο καιρός είναι απίστευτος σήμερα
και θα πάμε εκδρομή. Πρέπει να ετοιμασουμε
πράγματα για πικ-νικ.

我在python中使用正则表达式,我的命令是

re.findall(r'\b.*?-\n.*?\s', data, re.UNICODE)

在边界之间获取单词,但结果是:

Καλημέρα ο καιρός είναι απίστευτος σή-
μερα

不仅仅是这个词

σή-μερα

有人知道我做错了什么吗?希腊文字有问题吗?


共2个答案

匿名用户

您需要使用re。子功能。,

>>> s = '''Καλημέρα ο καιρός είναι απίστευτος σή-
μερα και θα πάμε εκδρομή. Πρέπει να ετοι-
μασουμε πράγματα για πικ-νικ.'''
>>> print(re.sub(r'-\n(\S+)\s+', r'\1\n', s))
Καλημέρα ο καιρός είναι απίστευτος σήμερα
και θα πάμε εκδρομή. Πρέπει να ετοιμασουμε
πράγματα για πικ-νικ.

演示

\S匹配一个或多个非空格字符,其中\S匹配一个或多个空格字符<代码>re。sub功能将使用替换部件中的字符替换所有匹配字符。因此,这个r'-\n(\S)\S'regex匹配连字符和后面的换行符以及后面的单词()称为捕获组,用于捕获与捕获组中存在的模式匹配的字符。这里,捕获组中存在的模式是\S。因此,它匹配并捕获新行字符后面的单词。通过指定替换部件的组索引号,可以在替换部件中引用捕获的字符。

匿名用户

您可以使用此正则表达式搜索:

\b(\w+)-\r?\n(\w+)\b

并替换为:

\1\2\n

正则表达式演示

代码:

import re
p = re.compile(ur'\b(\w+)-\r?\n(\w+)\b', re.UNICODE)

result = re.sub(p, u"\1\2\n", input)