繁体   English   中英

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

[英]Python regular expression to check start string is present or not

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

示例: 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)

如何编写此正则表达式检查行以“#”或“ [”等条件开头

对于第一套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:
    ...

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

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

它将匹配所有不符合您在答案中指定的逻辑的内容-因此将仅提取不符合您提供的逻辑的内容,因此将忽略所有具有指定条件的行。 这种单一模式可以节省您将python逻辑与正则表达式混合使用的过程,这可能会更加一致。

在这里演示

说明:

  • ^锚定到字符串的开头
  • [^#\\[]确保行首没有[#
  • [^=]*? 懒惰地匹配除=以外的任何其他任何内容
  • =完全匹配一个=
  • [^=]*? 懒惰地匹配除=以外的任何其他任何内容
  • $字符串锚的结尾。

例如,如果您正在运行bash来提取所有匹配的行,则可以将其与grep一起使用,从而忽略所有所需的行,或者使用如下所示的简单python脚本;

import re 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM