Python中的字符串反转

7 投票
5 回答
753 浏览
提问于 2025-04-17 07:33

写一个简单的程序,从键盘读取一行输入,然后输出这行文字,但每个单词的字母顺序要反过来。这里的“单词”是指由字母、数字或连字符(‘-’)组成的一串字符。比如,如果输入是“Can you help me!”那么输出应该是“naC uoy pleh em!”

我刚刚尝试了下面的代码,但遇到了一些问题,

print"Enter the string:"
str1=raw_input()
print (' '.join((str1[::-1]).split(' ')[::-2]))

它输出的是“naC uoy pleh !em”,你看那个感叹号(!),这就是问题所在。有人能帮我解决这个问题吗???

5 个回答

0

我的回答虽然有点啰嗦,但它可以处理句子末尾的多个标点符号,也能处理句子中间的标点符号。

import string
import re

valid_punctuation = string.punctuation.replace('-', '')
word_pattern = re.compile(r'([\w|-]+)([' + valid_punctuation + ']*)$')

# reverses word. ignores punctuation at the end.
# assumes a single word (i.e. no spaces)
def word_reverse(w):
    m = re.match(word_pattern, w)
    return ''.join(reversed(m.groups(1)[0])) + m.groups(1)[1]

def sentence_reverse(s):
    return ' '.join([word_reverse(w) for w in re.split(r'\s+', s)])

str1 = raw_input('Enter the sentence: ')
print sentence_reverse(str1)
6

最简单的方法可能是使用 re 模块来分割字符串:

import re
pattern = re.compile('(\W)')
string = raw_input('Enter the string: ')
print ''.join(x[::-1] for x in pattern.split(string))

运行后,你会得到:

Enter the string: Can you help me!
naC uoy pleh em!
3

你可以使用 re.sub() 这个方法来找到每个单词并把它反转过来:

In [8]: import re

In [9]: s = "Can you help me!"

In [10]: re.sub(r'[-\w]+', lambda w:w.group()[::-1], s)
Out[10]: 'naC uoy pleh em!'

撰写回答