按字词分组(不区分大小写)

时间:2015-06-14 20:25:27

标签: python regex string split

如果我想参加

"hi, my name is foo bar"

并将其拆分为"foo",并将该拆分区分为不区分大小写(在"foO""FOO""Foo"等任意一个上拆分,我应该怎么做?请记住,虽然我希望拆分不区分大小写,但我也希望保持字符串其余部分的区分大小写。

所以,如果我有:

test = "hi, my name is foo bar"

print test.split('foo')

print test.upper().split("FOO")

我会得到

['hi, my name is ', ' bar']
['HI, MY NAME IS ', ' BAR']

分别

想要的是:

['hi, my name is ', ' bar']

每一次。目标是保持原始字符串的区分大小写,除了我分裂的内容。

所以如果我的测试字符串是:

"hI MY NAME iS FoO bar"

我想要的结果是:

['hI MY NAME iS ', ' bar']

3 个答案:

答案 0 :(得分:16)

您可以将re.split functionre.IGNORECASE flag(或简称为re.I)一起使用:

>>> import re
>>> test = "hI MY NAME iS FoO bar"
>>> re.split("foo", test, flags=re.IGNORECASE)
['hI MY NAME iS ', ' bar']
>>>

答案 1 :(得分:1)

这不是确切答案,而是基于问题的解决方案。 在网上搜索了一会之后,我实现了以下内容。

这是我的自定义标签(请参见how to do it)。

from django.template.defaultfilters import register
from django.utils.html import escape
from django.utils.safestring import mark_safe

@register.simple_tag
def highlight(string, entry, prefix, suffix):
    string = escape(string)
    entry = escape(entry)
    string_upper = string.upper()
    entry_upper = entry.upper()
    result = ''
    length = len(entry)
    start = 0
    pos = string_upper.find(entry_upper, start)
    while pos >= 0:
        result += string[start:pos]
        start = pos + length
        result += prefix + string[pos:start] + suffix
        pos = string_upper.find(entry_upper, start)
    result += string[start:len(string)]
    return mark_safe(result)

它接受不安全的字符串并返回转义的结果。

以这种方式使用它:

<span class="entityCode">{% highlight entity.code search_text '<span class="highlighted">' '</span>' %}</span>

我使用嵌套的<span>来继承所有样式。它显示类似

enter image description here

答案 2 :(得分:-1)

您还可以搜索某些内容并获取该关键字的起始位置。我建议用“substring”方法剪掉它。 (我来自C#,所以我不知道这种语言的方法是什么)