python - 在Python中用正则表达式替换模式的一部分

标签 python regex

我正在尝试一些非常简单的事情。我的字符串是

Hello a1234 World a3456 Python a4567 a4567

我想找到所有的单词

  • 以一个开头
  • 后面有四个数字

我想将这种情况下的小“a”替换为“A”。

re.sub("\ba\d\d\d\d\b','A\d\d\d\d',str)

我知道上面的正则表达式是错误的。我希望输出为

Hello A1234 World A3456 Python A4567 A4567

如何仅替换我获得的匹配项的一部分?

使用新字符串进行编辑

str_check='''
Helloa1256
Hello a1256
Hello a1256
Hello a1256
'''
x=re.sub('\ba(?=\d\d\d\d\b)','A',str_check)
print(x)

为什么全词搜索在这里失败?

最佳答案

使用positive lookahead assertion .

re.sub(r'\ba(?=\d{4}\b)','A',string)

断言不会消耗任何字符,但断言是否可能匹配。所以上面的正则表达式只匹配 a ,后面紧跟 4 位数字。将匹配的 a 替换为 A 将为您提供所需的输出。

capturing group

re.sub(r'\ba(\d{4})\b',r'A\1',string)

这会将字母 a 后面的 4 位数字捕获到一个组中。稍后我们可以通过在替换部分中指定它的索引号来引用捕获的字符,例如 \1 (引用第一组)。

关于python - 在Python中用正则表达式替换模式的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29624251/

相关文章:

Python 数字到单词,例如 10K、10.65M

python - 选择egg安装的Python版本或安装并行版本的site-package

Javascript正则表达式匹配URL到 '/'

正则表达式替换转义字符

java - 如何在 Pattern.compile() 中转义管道字符

javascript - 货币字段的正则表达式

python - 我应该使用 Lex 还是自制的解决方案来解析公式?

python - 是否有类似于 C++ 中的 std::bitset 的内置位集?

python - 对列表中的列表列表进行排序

ruby - 用正则表达式替换字符串,如果某些单词与数组匹配则替换