我试图在搜索过程中使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.'
答案 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:])