编程的新手,到目前为止,我已经从网上的类似示例中学到了东西。
这是用于外语的随机句子生成器。但是,如果它们恰好相邻出现,我想在字符串的两个特定字符之间插入一个字符。在这种情况下,我希望evowel和avowel变量中的字符用'y'分隔。
我以为我可以尝试有条件的拆分+重新加入,但是我不确定如何搜索(在这种情况下)evowel_avowel,在该边界处拆分,插入y,然后重新加入。因此,随机生成的字符串“ eametetuk”将变为“ eyametetuk”,“ eseapah”>“ eseyapah”等。
编辑:我需要能够处理元音中的任何内容。为了简单起见,我只包含两个变体,但是该语言具有更多的元音和更多的变体(大约60个变体需要发生这种变化)。
我需要为此创建自己的函数吗?我猜我在某处需要正则表达式。
import random
c1 = ("e","é")
c2 = ("a","se")
root = ("apa","mete")
tense = ("h","tuk")
avowel = ("a","á")
evowel = ("e","é")
#syntax
x = [c1,c2,root,tense]
#randomly selects morphemes
s = "".join([random.choice(i) for i in x])
print(s)
答案 0 :(得分:0)
您可以像下面这样进行替换。
import random
c1 = ("e","é")
c2 = ("a","se")
root = ("apa","mete")
tense = ("h","tuk")
avowel = "éá"
avowelr= "éyá"
evowel = "ea"
evowelr = "eya"
#syntax
x = [c1,c2,root,tense]
#randomly selects morphemes
s = "".join([random.choice(i) for i in x])
s = s.replace(avowel, avowelr)
s = s.replace(evowel, evowelr)
print(s)
答案 1 :(得分:0)
使用正则表达式(re
模块):
import re
txt1 = "eametetuk"
txt2 = "eseapah"
evowel = ("e","é")
avowel = ("a","á")
evowels = "|".join(evowel)
avowels = "|".join(avowel)
out1 = re.sub(r'('+evowels+')('+avowels+')',r'\1y\2',txt1)
out2 = re.sub(r'('+evowels+')('+avowels+')',r'\1y\2',txt2)
print(out1) # eyametetuk
print(out2) # eseyapah
该方法适用于任何元音-元音组合,例如:
txt3 = "xéay"
out3 = re.sub(r'('+evowels+')('+avowels+')',r'\1y\2',txt3)
print(out3) # xéyay
以此类推。
说明:我使用的|
在正则表达式模式内表示LOGICAL OR。然后,我创建了具有两组的模式-用括号表示,然后在re.sub
的第二个参数中写道,我想要第一个组,然后是字母y,然后是第二个组。
请注意,re.sub
的组索引从1而不是0开始,还请注意,我使用了原始字符串,这意味着我不必转义\
即可指向第一组和第二组
答案 2 :(得分:0)
您可以通过遍历字符串中的所有成对字符,检查第一个是否在evowels中,第二个在元音中,如果是,则返回第一个,并返回y
,否则返回第一个。 br />
如果这是通过列表理解完成的,则可以将其直接连接到结果字符串:
txt1 = "eametetuk"
txt2 = "eseapah"
evowel = 'eé' #("e","é") you're free to put all vowels in one string, too'
avowel = 'aá' #("a","á") because strings are also iterables
def vowel_pair_sep(txt, sep='y', ev='eé', av='aá'):
return (''.join(
e + sep
if (e in ev) and (a in av)
else e
for e, a in zip(txt[:-1], txt[1:]))
+ txt[-1])
vowel_pair_sep(txt1)
# eyametetuk
vowel_pair_sep(txt2)
# eseyapah
由于分隔符和元音是该函数的参数,因此可以轻松地适应不同的需求:
vowel_pair_sep('tkdgtkdg', '_', 'dt', 'gk')
# t_kd_gt_kd_g