为什么这不是在正确的位置添加正确的字符串?

时间:2014-04-25 05:17:55

标签: python string python-2.7

我正在寻找以下方法:

  1. 将输入作为字符串输入(使用raw_input()
  2. 在字符串中查找“字符串”(例如在'hello'中查找">>> x = 'hello'\n"
  3. 使用<font color="830000"></font>围绕这些字符串(例如">>> x = 'hello'\n"成为">>> x = <font color="830000">'hello'</font>\n"
  4. 这是我的代码:

    string = raw_input('Enter a string: ')
    
    count = 0
    
    for k in range(0, len(string)):
        if string[k] == "'":
                count+=1
                if count % 2 == 0:
                        string = list(string)
                        string[k] = string[k]+'</font>'
                        string = ''.join(string)
                else:
                        string = list(string)
                        string[k] = '<font color="830000">'+string[k]
                        string = ''.join(string)
    
    print string
    

    运行如下:

    $ python blaahh.py
    Enter a string: >>> x = 'hello'\n>>> y = 'bye'\n
    >>> x = <font color="830000">'</font>hello'\n>>> y = 'bye'\n
    

    期望的输出:

    >>> x = <font color="830000">'hello'</font>\n>>> y = <font color="830000">'bye'</font>\n
    

    实际输出:

    >>> x = <font color="830000">'</font>hello'\n>>> y = 'bye'\n
    

    为什么它把我的琴弦放在错误的地方?

2 个答案:

答案 0 :(得分:4)

您可以使用正则表达式捕获'所包围的字符串,然后在它们周围添加HTML标记。

data = ">>> x = 'hello'\n>>> y = 'bye'\n"
import re
print re.sub(r"(\'.*?\')", r'<font color="830000">\1</font>', data)
# >>> x = <font color="830000">'hello'</font>
# >>> y = <font color="830000">'bye'</font>
# 

此处\1表示捕获的字符串,我们将其替换为由html标记包围的相同字符串。

注意:您的代码无效,因为您在迭代索引时修改字符串。因此,当您更改string时,字符串的长度会有所不同。

当索引为8时,您要添加<font color="830000">,因此实际的string已更改且其长度也已更改。所以在添加标签之后,字符串就变成了这个

>>> x = <font color="830000">'hello'\n>>> y = 'bye'\n

当索引变为29时,它会再次找到'之前的hello,因此会在此之后添加结束标记。

答案 1 :(得分:-1)

正如你所说,你需要查找&#34;字符串&#34;在输入字符串中并用前缀和后缀包装它来执行此操作可以使用下一个函数:

def wrap_word(string, word):
    wrapped = "<font color=\"830000\">%s</font>" % word
    return wrapped.join(string.split(word))

string = raw_input("Enter string: ")
print wrap_word(string, "'hello'")

结果将是:

Enter string: >>> x = 'hello'\n>>> y = 'bye'\n
>>> x = <font color="830000">'hello'</font>\n>>> y = 'bye'\n

至于你的输出结果是:

>>> x = <font color="830000">'</font>hello'\n>>> y = 'bye'\n

在哪里&#39;你好&#39; &#34;串&#34;完全错了。所以如果你想包装一个预定义的&#34;字符串&#34;可以使用wrap_word函数。

但是,正如你的例子澄清了欲望输出不是包装&#34;字符串&#34;,要求是将每个单词包装在已用单引号包装的字符串中。当然,在这种情况下,正则表达式首选于@thefourtheye答案中的显示方式。

P.S。对不起,最初的错误答案。