簡體   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