Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过一组字符串将字符串拆分为列表_Python_Regex_String_Re - Fatal编程技术网

Python 通过一组字符串将字符串拆分为列表

Python 通过一组字符串将字符串拆分为列表,python,regex,string,re,Python,Regex,String,Re,我正在处理用乌兹别克语写的单词。该语言有以下字母: alphabet = ["a", "b", "c", "d", "e", "f", "g", "g'", "h", "i", "j", "k", "l", "m&quo

我正在处理用乌兹别克语写的单词。该语言有以下字母:

alphabet = ["a", "b", "c", "d", "e", "f", "g", "g'", "h", "i", 
    "j", "k", "l", "m", "n", "ng", "o", "o'", "p", "q", "r", 
    "s", "sh", "t", "u", "v", "x", "y", "z"]
如您所见,有些字母具有多个字符,如
o'
g'
sh
。如何将这种语言中的一个单词拆分成乌兹别克字母列表?例如,将单词
“o'zbek”
拆分为
[“o'”、“z”、“b”、“e”、“k”]

如果我这样做:

word = "o'zbek"
letters = list(word)
其结果是:

['o', "'", 'z', 'b', 'e', 'k']
['', "'", '', '', '', '']
这是不正确的,因为
o
不在一起

我也尝试过这样使用正则表达式:

import re
expression = "|".join(alphabet)
re.split(expression, word)
但结果是:

['o', "'", 'z', 'b', 'e', 'k']
['', "'", '', '', '', '']

像这样的东西很管用

double={o',“ng”,“g',“sh”}
string=“o'zbek”
字母=[]
而字符串:
如果字符串[:2]为双精度:
letters.append(字符串[:2])
字符串=字符串[2:]
其他:
letters.append(字符串[0])
字符串=字符串[1:]
如果没有三个或更长的字母,则可以列出集合中的所有双字母(在集合中查找元素要比在列表中查找快)

然后遍历字符串,并尝试在字符串开头找到双字母。如果存在,则将其存储在字母列表中

重新导入
字母=re.findall((o'| g'| ng | sh |[a-z]),字符串)

同样有效。

要优先考虑多个字符的字母,首先我们按照字符长度对字母表进行排序。然后像处理
“|”一样将其传递给正则表达式。join
,然后
re.findall
给出拆分列表:

重新导入
已排序\字母表=已排序(字母表,键=len,反向=True)
regex=re.compile(“|”)
def split_字(字):
返回关于findall(正则表达式,word)
使用:

>>> split_word("o'zbek")
["o'", 'z', 'b', 'e', 'k']

>>> split_word("asha")
['a', 'sh', 'a']

如果您专门寻找正则表达式,可以尝试使用如下模式使用
re.findall

[a-fh-mp-rt-z]|[go]'?|ng?|sh?
  • [a-fh-mp-rt-z]
    -包含所有普通字母的字符类
  • |
    :或:
  • [go]'?
    -后跟可选引号的“g”或“o”
  • |
    -或:
  • ng?
    -文字“n”后跟可选的“g”
  • |
    -或:
  • sh?
    -文字“s”后跟可选的“h”
在线查看

印刷品:

["o'", 'z', 'b', 'e', 'k']


请注意,您也可以优先考虑这些“双”字母,如:
[go]'ng | sh |[a-z]
,有点像@MustafaAydin在他的解释中所说的那样。

您说这种语言有
'sh'
作为字母,但也有
's'
'h'
-您希望脚本如何正确阅读
'asha'
?是
['a'、'sh'、'a']
还是
['a'、's'、'h'、'a']
?(类似地,符号
'
是否在其他上下文中允许使用,或者它仅在
o
g
之后使用?)如果它是
s
h
的组合,则应将其识别为字母
sh
,因此
'asha'
应拆分为
['a','sh','a']
。而且,yes
仅用于字母
o'
g'