使用python反转句子中的每个单词
我是python新手。我试着把句子中的每个词都倒转过来。我为此编写了以下代码,它运行良好 我的代码: [来自答案]使用python反转句子中的每个单词,python,Python,我是python新手。我试着把句子中的每个词都倒转过来。我为此编写了以下代码,它运行良好 我的代码: [来自答案] import re str = "I am Mike!" def reverse_word(matchobj): return matchobj.group(1)[::-1] res = re.sub(r"([A-Za-z]+)", reverse_word, str) print(res) 但我想在其中添加一个条件..只有单词应该反转,而不是任何符号。[字母数字单
import re
str = "I am Mike!"
def reverse_word(matchobj):
return matchobj.group(1)[::-1]
res = re.sub(r"([A-Za-z]+)", reverse_word, str)
print(res)
但我想在其中添加一个条件..只有单词应该反转,而不是任何符号。[字母数字单词和包含连字符的单词除外]
更新##
样本:
输入:“我是迈克!我12岁”
电流输出:“I ma ekiM!dna123 ym ega si 12”
所需输出:“I ma ekiM!321dna ege ym si 21”一种可能有效的方法是对单词列表进行额外的迭代,并使用
re.sub
将可选的前导标点字符移回现在颠倒的单词末尾:
s = "I am Mike!"
split_s = s.split()
r_word = [word[::-1] for word in split_s]
r_word = [re.sub(r'^([^\s\w])(.*)$', '\\2\\1', i) for i in r_word]
new_s = " ".join(r_word)
print(new_s)
I ma ekiM!
正则表达式:
您可以使用字符类[A-Za-z]
检查任何具有一个或多个长度的单词,捕获它,然后使用函数反转组1
import re
str = "I am Mike!"
def reverse_word(matchobj):
return matchobj.group(1)[::-1]
res = re.sub(r"([A-Za-z]+)", reverse_word, str)
print(res)
输出:
'I ma ekiM!'
I ma ekiM! dna123 ega-ym si 12
更新: 您可以通过以下方式来实现您的结果:
import re
str = "I am Mike! and123 my-age is 12"
def reverse_word(matchobj):
hyphen_word_pattern = r"([A-Za-z]+)\-([A-Za-z]+)"
match = re.search(hyphen_word_pattern, matchobj.group(1))
if match:
return re.sub(hyphen_word_pattern, f"{match.group(2)[::-1]}-{match.group(1)[::-1]}", match.group(0))
else:
return matchobj.group(1)[::-1]
res = re.sub(r"([A-Za-z]+\-?[A-Za-z]+)", reverse_word, str)
print(res)
输出:
'I ma ekiM!'
I ma ekiM! dna123 ega-ym si 12
根本不要使用re
def reverse_words_in_string(字符串):
spl=string.split()
对于i,枚举中的单词(spl):
spl[i]=word[:-1]
返回“”。加入(spl)
给予
“我妈!ekiM 321dna ega ym si 21'应该
不要有牛!
反向为不要回避woc!
,或者不要回避woc!
?如果是前者,您如何区分不算作单词一部分的符号和算作单词一部分的符号?因为字母和符号都是字符串-您可能希望列出要跳过的符号,如“符号=[!”、“?”、…]循环时跳过它们。但正如Kevin所提到的-你肯定必须决定如何区分符号和单词部分谢谢解决方案。它工作得很好。我忘了添加字母数字字符和连字符的连续序列应该正常反转的内容…我应该做什么更改?@user2809967e将其更新到问题详细信息中。@user2809967是否可以为更新后的问题添加样本输入输出添加样本输入输出