在 python 正则表达式中的模式后放置逗号

Put comma after a pattern in python regex

就像问题说的那样,我正在尝试在模式或子字符串的末尾添加一个逗号。我找到了 3 个解决方案来完成这项工作,并且看起来也合乎逻辑。但他们没有改变任何东西。我会告诉你所有这些代码。目标是找出是否有我遗漏的东西或我可以添加的东西以使其正常工作。

顺便说一句,在 Google 上,大多数与逗号相关的问题都是关于在数字字符串中的第 000 位、第 5 位等位置添加逗号,例如 - 1,00,000。那不是我要找的。

下面是我试过的一些代码:

import re
f = open('pizza.txt', 'r')
content = f.read()



for x in content:
  regex = r"\d{2}/\d{2}/\d{4}"
  rep_str = regex+","
  sentence += re.sub(regex, rep_str, x)
   
print(sentence)


content="42/20/2021 every day is a good day 30.25

13/14/2015 today is saturday 24."

在这里,我尝试从文本文件中逐行读取它。底部的内容变量显示文本文件中的内容。那些只是测试字符串。每个字符串都有一个日期模式,后跟一些与数字混合的文本,然后是一个浮点数。

理想情况下,我想在日期之后放一个逗号,在文本和数字混合之后放一个逗号,就在浮点数之前。

为了简单起见,我首先在日期后添加了第一个逗号。

变量正则表达式具有日期模式。变量 rep_str 包含我想要替换模式的内容,即模式后跟一个逗号。然后 re.sub 完成这项工作。输出是文本文件中的字符串,没有变化。没有逗号。

下一个代码:

content = "13/14/2015 today 001 is saturday 24.34"
m = re.sub(r'(\d{2}/\d{2}/\d{4})(.*)', r' , ', content)
   
print(m)

更简单,没有文本文件,只有 1 个字符串。该代码有 2 种模式。一个用于约会,另一个用于其他一切。试图在它们之间添加逗号。同样的结果。没有逗号,没有错误,只是与输出相同的字符串。

第三次尝试:

content = "13/14/2015 today 001 is saturday 24.34"
result = re.sub('/(?<=\d\b)(?!,)/', ',', content); 
print(result)

这段代码是从这里收集的。代码的第一部分寻找以带有单词边界的数字结尾的字母数字。下一个大括号确认已经没有逗号。然后放置逗号。这段代码显然解决了我遇到的类似问题。所以我试了一下。令人惊讶的是,结果是一样的。没有错误,没有变化,与输出相同的字符串。

如果您发现任何问题或能想到有效的代码,请提出建议。

你需要使用

import re

with open('pizza.txt', 'r') as f:
    for line in f:
        print(re.sub(r'\d{2}/\d{2}/\d{4}', r'\g<0>,', line))

查看 Python 演示:

import re

content="""42/20/2021 every day is a good day 30.25
13/14/2015 today is saturday 24."""

for line in content.splitlines(False):
    print(re.sub(r'\d{2}/\d{2}/\d{4}', r'\g<0>,', line))

输出:

42/20/2021, every day is a good day 30.25
13/14/2015, today is saturday 24.

详情:

  • with open('pizza.txt', 'r') as f: - 打开 pizza.txt 文件进行读取
  • for line in f: - 逐行读取 f 文件
  • print(re.sub(r'\d{2}/\d{2}/\d{4}', r'\g<0>,', line)) - 打印正则表达式替换的结果:r'\d{2}/\d{2}/\d{4}'(注意原始字符串文字中的单个反斜杠)找到所有出现的两位数,/,两位数, / 和四位数字并替换为相同的找到值(\g<0> 反向引用指的是整个匹配值)并在其后附加一个逗号。 `