python - 使用替换的正则表达式来转换数字

标签 python regex substitution

我是一名 Python 初学者,所以请记住我的正则表达式技能等级为 -122。

我需要将包含 file1 文本的字符串转换为 file01,但不将 file10 转换为 file010 .

我的程序是错误的,但这是我能得到的最接近的,我尝试了几十种组合,但我无法接近:

import re
txt = 'file8, file9, file10'
pat = r"[0-9]"
regexp = re.compile(pat)
print(regexp.sub(r"0\d", txt))

有人可以告诉我我的模式和替换有什么问题并给我一些建议吗?

最佳答案

您可以捕获数字并在添加 0 之前检查长度,但您也可以使用它:

import re
txt = 'file8, file9, file10'
pat = r"(?<!\d)(\d)(?=,|$)"
regexp = re.compile(pat)
print(regexp.sub(r"0\1", txt))

regex101 demo

(?<! ... )称为负向回顾。如果其后面的模式具有负向后查找中的模式匹配,则这可以防止(负)匹配。例如,(?<!a)b将匹配所有 b在字符串中,除非它有 a在它之前,意思是bb , cb匹配,但是ab不匹配。 (?<!\d)(\d)因此匹配一个数字,除非它前面有另一个数字。

(\d)是一个数字,包含在捕获组中,用简单的括号表示。捕获的组存储在第一个捕获组中。

(?= ... )是积极的前瞻。 如果正向先行内的模式与此正向先行之前的模式匹配。换句话说,a(?=b)将匹配所有 a仅当存在 b 时才在字符串中在它之后。 ab匹配,但是acaa不要。

(?=,|$)是一个正向前瞻,包含 ,|$表示逗号或字符串结尾。

(?<!\d)(\d)(?=,|$)因此匹配任何数字,只要它前面没有数字并且后面有逗号,或者该数字位于字符串末尾。

关于python - 使用替换的正则表达式来转换数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151690/

相关文章:

java - 使用 UNICODE_CHARACTER_CLASS 标志时不同的 Java 正则表达式匹配行为

sql - 如何在SQL中使用替换变量来提示用户输入客户名称?

monads - 绑定(bind)器下的单子(monad)替换

python - 获取导入类的别名

python - 如何在Python中将整数转换为无符号32位?

python - 将 Stripe 与 Flask 集成时,如何防止表单提交到服务器?

perl 只查找和替换完全匹配

python - 是否可以同时将 Pub/Sub 和 BigQuery 作为 Google Dataflow 中的输入?

excel - 正则表达式从 Outlook 电子邮件正文中提取金额

Php函数展开化学方程式