使用RegEx查找并打印土耳其语的复数单词

2024-10-02 00:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python相当陌生。在代码中,我读取了一个文本文件作为输入,并将该文本文件上的每一行readen作为元素放入一个列表中。在

我正在尝试使用RegEx编写代码来查找和打印复数单词。在土耳其语中,复数是'-ler'或'-lar'后缀。在

我的代码如下:

import re

f = open('C:/Users/ENE/Desktop/CSE & Kodlar/nlp/utf8textfile.txt', encoding='utf-8-sig', errors='ignore')


with f as file:
    list = file.readlines()
list = [x.strip() for x in list]

print(list)

total = 0
for i in list:
    total += len(i)
ave_size = float(total) / float(len(list))
print("Average word length = " + str(ave_size))

#p = re.compile('.*l[ae]r.*')

for element in list:
    m = re.findall(".*l[ae]r.*", element)
    if m:
        print(m)

其输出为

list=['Aliler geldiler','Selam olsun sana','Merhabalar','Java kitabınerede']

for循环: ['Aliler geldiler'] ['Merhabalar']

我试着逐字打印,比如['Aliler'],['geldiler']和['Merhabalar']。我该怎么做?在


Tags: 代码inreforlenlistfiletotal
3条回答

.*匹配所有内容(除了行结束符)。在

这意味着如果.*l[ae]r.*包含lar或{},则它将生成整个输入,否则将不匹配任何内容。在

你要匹配单词,而不是整行。在

由于单词必须以l[ae]r结尾,因此需要确保r是该单词的结尾。这可以使用\b(单词边界)来完成。在

由于单词必须以l[ae]r结尾,因此它必须以1个或多个(+)个单词字符作为前缀,即\w。在

现在,\w只匹配ASCII字母(A-Z),因此您需要启用Unicode模式,以便它匹配所有字母(例如^{}^{})。还要注意,\w匹配数字(0-9)和下划线(U),但这通常是可以的。在

所以,你的正则表达式应该是:

r"\w+l[ae]r\b"u

演示请参见regex101.com。在

您可以使用\w*l[ea]r\b正则表达式查找以lar或{}结尾的所有单词:

results = re.findall(r'\w*l[ea]r\b', s)

参见regex demo。在Python3.x中,\b单词边界默认是Unicode感知的,在Python2.x中,我建议添加re.U标志。在

在这里,s可以是整行,甚至是整个文档。在

详细信息

  • \w*-0+个字母、数字和_(在python3.x中,它将匹配所有Unicode字母、数字或_,您可以使用[^\W\d_]*来只匹配字母)
  • l-一个l字母
  • [ea]-e或{}
  • r-一个r字母
  • \b-一个单词边界(注意r'..'符号用于避免双重转义\b使引擎将其解析为单词边界)。在

您可以通过以下方式实现您想要的:

import re

example = "example words Aliler Merhabalar"

words = example.split()

for word in words:
    if (re.search(r"ler$", word)):
        print (word)
    elif (re.search(r"lar$", word)):
        print (word)

这将输出:

^{pr2}$

相关问题 更多 >

    热门问题