热门标签 | 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的一个是完美的。


推荐阅读
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • Python正则表达式(Python RegEx)
    Python正则表达式快速参考常用函数:re.match():从字符串的起始位置匹配一个正则表达式。re.search():扫描整个字符串并返回第一个成功的匹配。re.s ... [详细]
  • Java中字符串截取方法详解
    本文详细介绍了Java中常用的字符串截取方法及其应用场景,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • 本文详细探讨了Java中HashMap类的hash()方法的工作原理及其重要性,特别是在JDK 7版本中的实现。 ... [详细]
  • 深入解析 C++ 中的 String 和 Vector
    本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • 现在越来越多的人使用IntelliJIDEA,你是否想要一个好看的IDEA主题呢?本篇博客教你如何设置一个美美哒IDEA主题,你也可以根据 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
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社区 版权所有