热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Python2.7中使用带有IGNORECASE的re.sub?-HowcanIusere.subwithIGNORECASEinPython2.7?

Iwanttomodifyastringwiththehelpofre.sub:我想在re.sub的帮助下修改一个字符串:>>>re.sub(spart

I want to modify a string with the help of re.sub:

我想在re.sub的帮助下修改一个字符串:

>>> re.sub("sparta", r"\1", "Here is Sparta.", flags=re.IGNORECASE)

I expect to get:

我希望得到:

'Here is Sparta.'

But I get an error instead:

但我得到一个错误:

>>> re.sub("sparta", r"\1", "Here is Sparta.", flags=re.IGNORECASE)
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.7/re.py", line 155, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "/usr/lib/python2.7/re.py", line 291, in filter
    return sre_parse.expand_template(template, match)
  File "/usr/lib/python2.7/sre_parse.py", line 833, in expand_template
    raise error, "invalid group reference"
sre_constants.error: invalid group reference

How should I use re.sub to get the correct result?

我该如何使用re.sub来获得正确的结果?

2 个解决方案

#1


2  

You do not specify any capturing group in the pattern and use a backreference to Group 1 in the replacement pattern. That causes an issue.

您不在模式中指定任何捕获组,并在替换模式中对组1使用反向引用。这导致了一个问题。

Either define a capturing group in the pattern and use the appropriate backreference in the replacement pattern, or use the \g<0> backreference to the whole match:

在模式中定义捕获组并在替换模式中使用适当的反向引用,或使用\ g <0>反向引用整个匹配:

re.sub("sparta", r"\g<0>", "Here is Sparta.", flags=re.IGNORECASE)

See the Python demo.

请参阅Python演示。

#2


0  

When you use \x in your second string (replacement string I think it's called) where x is a number, python is going to replace it with the group x.

当您在第二个字符串中使用\ x(替换字符串,我认为它被称为),其中x是一个数字,python将用组x替换它。

You can define a group in your regex by wrapping it with parentheses, like so:

您可以通过用括号括起来在正则表达式中定义一个组,如下所示:

re.sub(r"capture (['me]{2})", r'group 1: \1', 'capture me!') # => group 1: me
re.sub(r"capture (['me]{2})", r'group 1: \1', "capture 'em!") # => group 1: 'em

Nested captures? I've lost the count!

嵌套捕获?我输掉了数!

It's the opening bracket that defines it's number:

它是定义它的数字的开始括号:

(this is the first group (this is the second) (this is the third))

Named group

Named group are pretty useful when you use the match object that returns re.match or re.search for example (refer to the docs for more), but also when you use complex regex, because they bring clarity.

当您使用返回re.match或re.search的匹配对象时,命名组非常有用(请参阅文档了解更多信息),以及使用复杂正则表达式时,因为它们带来了清晰度。

You can name a group with the following syntax:

您可以使用以下语法命名组:

(?Pyour pattern)

So, for example:

所以,例如:

re.sub("(?Phello(?P[test]+)) (?P[a-z])", "first: \g") # => first: hello

What is the group 0

The group 0 is the entire match. But, you can't use \0, because it's going to print out \x00 (the actual value of this escaped code). The solution is to use the named group syntax (because regular group are kind of named group: they're name is just an integer): \g<0>. So, for example:

组0是整场比赛。但是,您不能使用\ 0,因为它将打印出\ x00(此转义代码的实际值)。解决方案是使用命名的组语法(因为常规组是一种命名组:它们的名称只是一个整数):\ g <0>。所以,例如:

re.sub(r'[hello]+', r'\g<0>', 'lehleo') # => lehleo

For your problem

This answer is just suppose to explain capturing, not really answering your question, since @Wiktor Stribiżew's one is perfect.

这个答案只是假设解释捕获,而不是真正回答你的问题,因为@WiktorStribiżew的一个是完美的。


推荐阅读
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • 在使用 `useSelector` 选择器时,发现分派操作后状态未能实时更新。这可能是由于 React 组件的渲染机制或 Redux 的状态管理问题导致的。建议检查 `useSelector` 的依赖项和 `dispatch` 的调用时机,确保状态变化能够正确触发组件重新渲染。此外,可以考虑使用 `useEffect` 钩子来监听状态变化,以确保及时更新。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 深入解析 Golang 中 Context 的功能与应用
    本文详细探讨了 Golang 中 Context 的核心功能及其应用场景,通过深入解析其工作机制,帮助读者更好地理解和运用这一重要特性,对于提升代码质量和项目开发效率具有重要的参考价值。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
author-avatar
daadhkiw_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有