使用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) 但我想在其中添加一个条件..只有单词应该反转,而不是任何符号。[字母数字单

我是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)

但我想在其中添加一个条件..只有单词应该反转,而不是任何符号。[字母数字单词和包含连字符的单词除外]

更新##

样本: 输入:“我是迈克!我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是否可以为更新后的问题添加样本输入输出添加样本输入输出