【问题标题】:Regular Expression Removing All the content from File instead of matching pattern in Python正则表达式从文件中删除所有内容而不是Python中的匹配模式
【发布时间】:2019-11-14 10:00:16
【问题描述】:

我有以下输入文件:

输入文件:https://drive.google.com/open?id=1BkRRUKn_AvtRmV4L1pQlNLIPL7pVRAoY

我正在尝试在文本文件中添加空格,匹配以下 2 种情况,并保持其余未匹配行不变。

  • 案例 1: 从关键字Product开始的任何行。
  • 案例 2: 任何以“14 Spaces”开头的行,后跟“任何 4 个字符”和“行尾

这样对于新文件或新修改的输入文件,输出将如下所示。

输出文件:https://drive.google.com/open?id=1BkXjlrMG39yusKQ5dw8gYCGYo25xCrXF

输入:

输出:

我尝试了什么?

import re
import fileinput

pattern1 = re.compile('[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]+([0-9,A-Z][0-9,A-Z][0-9,A-Z][0-9,A-Z]+)$')
pattern2 = re.compile('PRODUCT:+/^[A-Z]{0,10}$/')

for line in fileinput.input('Input_File_S.txt', inplace = True, backup='.bak'):
   if re.search(pattern1,line):
       line = re.sub(pattern1, '                                                                                                                                      \1', line)
   elif re.search(pattern2,line):
       line = re.sub(pattern2, '                                                                                                                                      \1', line)

但这只是从我的文件中删除所有内容。对我做错的任何帮助或任何更正将不胜感激。

【问题讨论】:

  • 'PRODUCT:+/^[A-Z]{0,10}$/' 是一个从不匹配任何字符串的损坏正则表达式模式的示例。在两个消费模式之间,字符串位置的开始总是错误的。不要将正则表达式文字符号与字符串模式混合,Python 不支持前者。

标签: python regex text


【解决方案1】:

尝试模式:^(?:Product.+| {14}[a-zA-Z]{4}$)

解释:

^ - 匹配行首

(?:...) - 非捕获组

Product.+ - 匹配 Product 和一个或多个任意字符(换行除外)

| - 交替(或),

{14} - 匹配空间 14 次

[a-zA-Z]{4} - 匹配小写或大写字符 4 条

$ - 匹配行尾

【讨论】:

  • 感谢您的回答和帮助我理解工作的详细解释。我修改了相同的内容只是为了考虑模式 2 的数字。^(?:Product.+| {14}[0-9,a-zA-Z]{4}$) 两点:一:使用相同的模式在代码中仍然会从文件中删除所有内容,但是在 Notepad++ 中使用时,它会正确找到模式。二:我应该如何框住替换字符串以在匹配此模式时增加空间,同时保持其余字符串和其他不匹配的行不变
  • @Rahul 注意标志修饰符(这使得 ^$ 行为不同)。
猜你喜欢
  • 2016-04-30
  • 2021-05-26
  • 2022-08-21
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多