有没有办法让python str.partition忽略大小写?

时间:2011-03-30 00:25:59

标签: python regex string

我试图在搜索过程中使Python的str.partition函数忽略大小写,所以

>>>partition_tuple = 'Hello moon'.partition('hello')
('', 'Hello', ' moon')

>>>partition_tuple = 'hello moon'.partition('hello')
('', 'hello', ' moon')

如上图所示返回。

我应该使用正则表达式吗?

谢谢,

编辑:

赦免,我应该更具体一点。我想在字符串中找到一个关键字,改变它(通过添加它周围的东西)然后把它放回去。我做这个的计划是制作分区,然后改变中间部分然后将它们全部重新组合在一起。

示例:

'this is a contrived example' 

关键字'contrived'将成为:

'this is a <<contrived>> example'

我需要它来执行&lt;&lt;&gt;&gt;即使'人为'拼写为大写'C'。

请注意,单词中的任何字母都可以大写,而不仅仅是起始字母。

案件需要保留。

此问题的另一个独特之处是可以有多个关键字。事实上,甚至可以有一个关键词。也就是说,在上面的例子中,关键字可能是“假设的”和“人为的”,在这种情况下输出需要看起来像:

'this is <<a contrived>> example.'

6 个答案:

答案 0 :(得分:2)

怎么样

re.split('[Hh]ello', 'Hello moon')

这给出了

['', ' moon']

现在你有件,你可以随意把它们放在一起。 它保留了案​​例。

[编辑]
您可以在一个正则表达式中放置多个关键字(但请注意以下注意事项)

re.split(r'[Hh]ello | moon', 'Hello moon')

警告:重新使用匹配的第一个,然后忽略其余部分。

因此,只有在每个目标中都有一个SINGLE关键字时,输入多个关键字才有用。

答案 1 :(得分:1)

如果您不需要保留案例,则可以执行此操作:

>>> partition_tuple = 'Hello moon'.lower().partition('hello')
>>> partition_tuple
('', 'hello', ' moon')
>>> 

然而,正如您所看到的,这会使得结果元组也是小写的。您不能使分区不区分大小写。

答案 2 :(得分:1)

怎么样

'Hello moon'.lower().partition('hello')

答案 3 :(得分:1)

您尝试使用partition()的实际问题是什么?

不,partition()区分大小写,除非通过规范化主字符串,否则无法绕过它。

答案 4 :(得分:0)

或许有关该任务的更多信息可以帮助我们提供更好的答案。 例如,Bastien的答案是否足够,或者案例是否需要保留?

如果字符串具有您可以使用的嵌入空间 str.split(sep) 功能

但我猜你有一个更复杂的任务。 请详细说明。

答案 5 :(得分:0)

您也可以通过编写自己的case_insensitive_partition来做到这一点,这可能看起来像这样(几乎没有经过测试,但至少在琐碎的情况下确实有效):

def case_partition(text, sep):
    ltext = text.lower()
    lsep = sep.lower()
    ind = ltext.find(lsep)
    seplen = len(lsep)
    return (text[:ind], text[ind:ind+seplen], text[ind+seplen:])