正则表达式排除特定的特殊字符,空格和字母

时间:2018-08-06 12:57:10

标签: python regex python-3.x

我想要一个将其转换为正则表达式:

91009-01-28-00 Maximum (c/s)................  1543.5

对此:

91009-01-28-00    1543.5

因此,基本上,正则表达式可以转义字母,空格,正斜杠和方括号。

到目前为止,我已经编写了以下python代码:

with open('lcstats.txt', 'r') as lcstats_file:
        with open (lcstats_full_path + '_lcstats_full.txt', "a+") as lcstats_full_file:
            lcstats_full_file.write(obsid )
            for line in lcstats_file.readlines():
                if not re.search(r'Maximum [(c/s)]', line):
                    continue
                line = (re.sub(**REGEX**,'',line))  
                lcstats_full_file.write(line)

4 个答案:

答案 0 :(得分:2)

您似乎想拥有字符串的第一部分和最后一部分。如果每行都是这种情况,那么将其相应地拆分可能会有所帮助,如以下代码所示

import re
line = "91009-01-28-00 Maximum (c/s) ................  1543.5"
line=line.split(' ')
line=line[0]+' '+ line[-1]
print(line)

输出:

91009-01-28-00 1543.5

答案 1 :(得分:1)

在您的代码中,您正在使用搜索来检查是否可以匹配Maximum (c/s),然后要使用正则表达式将其删除。

我认为您的正则表达式Maximum [(c/s)]Maximum \(c/s\)。方括号使它成为捕获组中的character class(c/s)捕获c/s,如果您只想匹配它,则不需要。

您可以做的是匹配Maximum (c/s)并使用字符类[ .]+匹配空白或逗号一次或多次,并替换为空字符串。

Maximum \(c/s\)[ .]+

import re

s = "91009-01-28-00 Maximum (c/s)................  1543.5"
print( re.sub(r"Maximum \(c/s\)[ .]+", "", s))

Demo

答案 2 :(得分:0)

尝试使用此正则表达式/\s[^0-9]+/,它将与第一个空格匹配,后跟1个或多个非数字字符。您需要在替换字符串中添加一个空格,以使剩余数据的两位分开。

答案 3 :(得分:0)

正则表达式:

((?<!\d)\D)

匹配所有非数字\D,后面没有数字\d