我制作了一个函数,根据角色位置,用多个模式替换单个角色的多个实例
我发现有两种方法可以做到这一点:
def X替换(目标字符串):
while target_string.casefold().find('x') != -1:
x_finded = target_string.casefold().find('x')
if (x_finded == 0 and target_string[1] == ' ') or (target_string[x_finded-1] == ' ' and
((target_string[-1] == 'x' or 'X') or target_string[x_finded+1] == ' ')):
target_string = target_string.replace(target_string[x_finded], 'ecks', 1)
elif (target_string[x_finded+1] != ' '):
target_string = target_string.replace(target_string[x_finded], 'z', 1)
else:
target_string = target_string.replace(target_string[x_finded], 'cks', 1)
return(target_string)
从技术上讲,这一个是可行的,但我就是不能正确地使用正则表达式模式:
进口稀土
def多重替代(句子):
patterns = {(r'^[xX]\s'): 'ecks ', (r'[^\w]\s?[xX](?!\w)'): 'ecks',
(r'[\w][xX]'): 'cks', (r'[\w][xX][\w]'): 'cks',
(r'^[xX][\w]'): 'z',(r'\s[xX][\w]'): 'z'}
regexes = [
re.compile(p)
for p in patterns
]
for regex in regexes:
for match in re.finditer(regex, sentence):
match_location = sentence.casefold().find('x', match.start(), match.end())
sentence = sentence.replace(sentence[match_location], patterns.get(regex.pattern), 1)
return sentence
根据我的理解,第二个函数中唯一的问题是正则表达式模式。有人能帮我吗
<>编辑:对不起,我忘了告诉ReGEXES在一个字符串中寻找不同的X字符,在一个单词的“Z”中替换一个X,在“CKS”的单词的中间或结尾,如果它是一个单独的'x'字符替换为“ECKS”
您需要
\b
(单词边界)和\B
(单词边界以外的位置):我将使用以下一组替换:
这里,
只是断言正则表达式不匹配任何空格字符
Edit:最后一个正则表达式也将匹配单词开头的
x
或X
。因此,我们可以使用以下方法要确保必须在
x
或X
之前/之后有一个字符\w
相关问题 更多 >
编程相关推荐