用于检查起始字符串的Python正则表达式是否存在

时间:2017-07-19 09:33:23

标签: python regex

我正在尝试编写一个正则表达式,该表达式应该检查该行的起始字符串并计算该行中存在的一些字符串。

实施例: 的 FILE.TXT

# Compute
[ checking
a = b
a
a=b>c=d

迭代此文件并忽略具有以下条件的行

我的条件:

(line.startswith("[") or line.startswith("#") or line.count("=") > 1 or '=' not in line)

我需要在正则表达式中重写上述条件。

尝试下面的内容,

re.search("^#",line)
re.search("^/[",line)

如何编写此正则表达式检查行以"#"开头。或" ["和其他条件

2 个答案:

答案 0 :(得分:2)

对于第一组startswith条件,您可以使用re.match

if re.match(r'[\[#]', text):
    ...

对于第二个条件,您可以使用re.findall(如果您想要计数):

if len(re.findall('=', text)) != 1:
    ...

您可以将上述两者与and结合使用,如下所示:

if re.match(r'[\[#]', text) and len(re.findall('=', text)) != 1:
    ...

答案 1 :(得分:1)

如果您确实希望使用单数正则表达式,则可以使用以下模式;

^[^#\[][^=]*?=[^=]*?$

哪个匹配所有不符合你在答案中指定的逻辑的东西 - 因此只会提取不符合你提供的逻辑的东西,因此会忽略所有符合条件的行。这种单一模式可以节省你将python逻辑与正则表达式混合使用,这可能更加一致。

Demo here

说明:

  • ^锚定到字符串的开头
  • [^#\[]确保行首不是[#
  • [^=]*?懒惰地匹配除=
  • 之外的任何数量的任何内容
  • =只匹配一个=
  • [^=]*?懒惰地匹配除=
  • 之外的任何数量的任何内容
  • $字符串锚定结束。

如果您正在运行bash来提取所有匹配的行,并因此忽略所有所需的行,或者使用如下的简单python脚本,则可以使用此grep;

导入重新 pattern = re.compile(' ^ [^#[] [^ =] ?= [^ =] ?$')

# For loop solution
with open('test.txt') as f:
    for line in f:
        if pattern.match(line):
            print(line)

# Alternative one-line generator expression;
with open('test.txt') as f:
    print('\n'.join((line for line in f if pattern.match(line))))

对于您的给定输出文件,两者都将打印出来;

a = b