gpt4 book ai didi

python - 使用 Python 将正则表达式搜索的字符串转换为小写

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:22 24 4
gpt4 key购买 nike

我有一些损坏的 XML(示例没有损坏,但文档损坏了),其中一部分如下所示:

<sp who="#FERN">
<speaker>FERNANDO</speaker>
<p>Un instante. Soy un hombre. Huir sería cobarde... ¡Sin defenderse! ¡Sin salvarte!... Va a venir... con la vara del guardia. ¡Ay, que ya la conoces! ¡Ah, maldito!... ¡Y me dices que ese hombre es bueno!...</p>
</sp>

我想将 who 属性的值转换为小写:

<sp who="#fern">

通常我在正则表达式中使用函数\U 和\L,但我认为 python 不支持这一点。我尝试了这个正则表达式:

text = re.sub(r'(who="#.*?")', r'\L\1', text)

但是输出是:

<sp \Lwho="#FERN">

这不是我想要的...有什么帮助吗,亲爱的 stackoverflowers?提前致谢!

最佳答案

您可以在re.sub中使用匿名函数

>>> s = '''<sp who="#FERN">
<speaker>FERNANDO</speaker>
<p>Un instante. Soy un hombre. Huir sería cobarde... ¡Sin defenderse! ¡Sin salvarte!... Va a venir... con la vara del guardia. ¡Ay, que ya la conoces! ¡Ah, maldito!... ¡Y me dices que ese hombre es bueno!...</p>
</sp>'''
>>> print re.sub(r'\b(who="#)([^"]*)', lambda m: m.group(1) + m.group(2).lower(), s)
<sp who="#fern">
<speaker>FERNANDO</speaker>
<p>Un instante. Soy un hombre. Huir sería cobarde... ¡Sin defenderse! ¡Sin salvarte!... Va a venir... con la vara del guardia. ¡Ay, que ya la conoces! ¡Ah, maldito!... ¡Y me dices que ese hombre es bueno!...</p>
</sp>
>>>

说明:

如果要对捕获的字符应用某些操作,则必须在 re.sub 的替换部分中使用 lambda 函数。

  • \b(who="#) 与您的确切字符串匹配 who="# 请注意,正则表达式中的 \b 称为单词和非单词字符之间匹配的单词边界,反之亦然。括号 (pattern) 用于捕获与括号内的模式匹配的字符。所以第一组包含 who="#

  • ([^"]*) 匹配任何字符,但不匹配 " 零次或多次。所以这应该捕获FERN

  • 在替换部分,我只是返回第一组+降低的第二组。

关于python - 使用 Python 将正则表达式搜索的字符串转换为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com