按单词分割(不区分大小写)

Posted

技术标签:

【中文标题】按单词分割(不区分大小写)【英文标题】:Split by a word (case insensitive) 【发布时间】:2015-08-30 07:10:19 【问题描述】:

如果我想服用

"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']

【问题讨论】:

我不明白这种拆分的应用。 FOO 在实际情况下会是什么?您是在提取人名还是其他内容? 一个可能的例子:SQL 脚本可以使用分隔符来分隔批次(例如 SQL 管理器中默认的“go”)。 SQL 引擎本身不理解这个分隔符,只有 shell 才能理解。因此,当您从 python 模块运行这样的脚本时,您需要在“开始”时拆分文件以连续运行单独的批次(不区分大小写 ofc)。 【参考方案1】:

您可以将re.split function 与re.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']
>>>

【讨论】:

感谢您使用 re 并提供如此漂亮的解决方案 :) @iCodez【参考方案2】:

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

这是我的自定义标签(请参阅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>

我使用嵌套的&lt;span&gt; 来继承所有样式。它显示类似

【讨论】:

【参考方案3】:

您还可以搜索某些内容并获取关键字的起始位置。我会推荐它并使用“子字符串”方法将其删除。 (我来自 C#,所以我不知道这种语言的方法是什么)

【讨论】:

以上是关于按单词分割(不区分大小写)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript正则表达式匹配不区分大小写的单词? [复制]

正则表达式不区分大小写搜索带有变量的整个单词

PHP 删除重复的单词(不区分大小写)

如何使用 Sql Server XQuery 搜索不区分大小写的单词?

正则表达式:匹配以“AM”结尾的单词(不区分大小写比较)[重复]

按字母顺序排序arraylist(不区分大小写)