用列表中的某些内容替换\ t

时间:2016-10-07 11:56:02

标签: python regex

>>>user_sentence = "hello \t how are you?"
>>>import re
>>>user_sentenceSplit = re.findall(r"([\s]|[\w']+|[.,!?;])",user_sentence)
>>>print user_sentenceSplit

我得到['hello', '\t', 'how', 'are', 'you', '?']

我不知道如何创建任何将'\t'替换为'tab'的代码。

3 个答案:

答案 0 :(得分:1)

我认为str.replace可以胜任。

user_sentence.replace('\t', 'tab')

在拆分字符串之前执行此操作。

答案 1 :(得分:1)

我不相信替换原始字符串中的\t会有效,您有两个问题:

  • 您的代码也会将空格输出为令牌,但您不想拥有它们
  • 字母之间的\t将成为单词标记的一部分。

因此,您需要将[\s]替换为匹配任何空格的[^\S ]模式,但需要使用常规空格(如果需要,将更多排除的空格符号添加到否定字符类中),并且需要遍历所有令牌并检查令牌是否等于选项卡,然后将其替换为tab值。因此,最好的方法是使用re.finditer并将找到的值推送到列表变量中,请参阅下面的示例代码:

import re
user_sentence = "hello \t how are you?"
user_sentenceSplit = []
for x in re.finditer(r"[^\S ]|[\w']+|[.,!?;]",user_sentence):
    if x.group() == "\t": # if it is a tab, replace the value
        user_sentenceSplit.append("tab")
    else:  # else, push the match value
        user_sentenceSplit.append(x.group()) 
print(user_sentenceSplit)

请参阅Python demo

答案 2 :(得分:0)

这是Python编译器的行为。你不应该担心它。 Pyhton的编译器商店tab\t。你不需要对它做任何事情,因为它会在对它执行任何操作时将其视为制表符。例如:

>>> my_string = 'Yes    Hello   So?'  # <- String with tab
>>> my_string  
'Yes\tHello\tSo?'    # <- Stored tab as '\t'
>>> print my_string
Yes Hello   So?   # While printing, again tab

但是你确切的要求对我来说并不清楚。如果您想将\t的值替换为tab字符串,则可以执行以下操作:

>>> my_string = my_string.replace('\t', 'tab')
>>> my_string
'YestabHellotabSo?'

其中my_string持有我在前面示例中提到的值。