【问题标题】:Put comma after a pattern in python regex在 python 正则表达式中的模式后放置逗号
【发布时间】:2022-01-28 09:13:20
【问题描述】:

就像问题说我试图在模式或子字符串的末尾添加一个逗号。我找到了 3 个解决方案,应该可以完成这项工作,而且看起来也很合乎逻辑。但他们并没有改变任何东西。我将向您展示所有这些代码。目标是找出我是否缺少某些东西或可以添加一些东西以使其正常工作。

顺便说一句,在 Google 上,大多数与逗号相关的问题都是关于在第 100 位的数字字符串中添加逗号,然后是第 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'\1 ,\2 ', content)
   
print(m)

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

第三次尝试:

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

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

如果您发现任何东西或能想到可行的代码,请提出建议。

【问题讨论】:

  • 你匹配文字 \dr'\\d',使用 regex = r"\d{2}/\d{2}/\d{4}"。您还将文件读入单个变量,因此此处不要使用 for 循环,只需使用 content = re.sub(regex, rep_str, content)。如果您需要逐行处理,请使用content = f.readlines()
  • 我尝试了单斜杠的模式,这就是我的初始代码。得到这个错误 :error: bad escape \d at position 0. 所以我按照系统提示进行了更改。我正在使用 jupyter 笔记本。还尝试了没有 for 循环的相同代码。没运气。顺便感谢您的评论。
  • 不好意思请问运行代码sn-p函数是新的吗?我第一次看到它。
  • 您收到该错误是因为您没有使用原始字符串文字。您应该使用原始字符串文字,然后使用带有正则表达式转义的单个反斜杠,或者使用普通字符串文字并使用带有正则表达式转义的双反斜杠(即定义单个文字反斜杠)。
  • 这是我这样做的方法 m = re.sub(r'[0-9]{4}',re.findall(r'[0-9]{4} ',content)[0]+",", content)

标签: python regex replace add comma


【解决方案1】:

你需要使用

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&lt;0&gt;,', line)) - 打印正则表达式替换的结果:r'\d{2}/\d{2}/\d{4}'(注意原始字符串文字中的单个反斜杠)查找所有出现的两位数字 /、两位数字、/ 和四位数字,并替换为相同的找到值(\g&lt;0&gt; 反向引用指的是整个匹配值)并在后面附加一个逗号。 `

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多