簡體   English   中英

在 python 中使用正則表達式進行中綴驗證

[英]Infix validation using regex in python

您可以使用此鏈接評估我的正則表達式。

我正在嘗試驗證中綴輸入是否采用正確的形式。
這是我的測試用例:

1 --> (12+4)^3-((13+2)-(4*5))    //should be correct
2 --> )3+7(                      //should be wrong
3 --> 2++                        //should be wrong
4 --> 2+4-                       //should be wrong
5 --> (19*7))                    //should be wrong
6 --> 2+8                        //should be correct

所以現在你可能知道我在想什么了。 我修改了很多網站和問題並得出結論,我應該使用遞歸正則表達式
所以我試着識別模式,然后我得到了這個(不正確的版本):

(^(\(?[0-9]+(\+\-\*\/\^)[0-9]*\))|^([0-9]+(\+\-\*\/\^)[0-9]+(?1)*))(?1)*$

我在 python 中使用正則表達式(不是重新)庫實現了它:

import regex
regex.search(r"(^(\(?[0-9]+(\+\-\*\/\^)[0-9]*\))|^([0-9]+(\+\-\*\/\^)[0-9]+(?1)*))(?1)*$","(12+4)^3-((13+2)-(4*5))") is not None

預期的 output 應該是True但我的 output 是False
我知道我的模式不正確,需要你的幫助。如果你知道更好的模式,那就太好了。謝謝。

我...得出結論,我應該使用遞歸正則表達式。

使用遞歸正則表達式確實可以做到這一點,這是regex庫所支持的。

您嘗試的錯誤之一是(\+\-\*\/\^)不代表運算符的選擇,而是要求所有運算符都按該順序出現。 您需要[+*/^-]語法。

我會建議這個正則表達式:

result = regex.match(r"^(([+-]*\d+|\((?1)\))([+^*/-](?2))*)$", s)

這假設您的輸入沒有空格,並且數字文字是(帶符號的)整數。

解釋:

  • [+-]* :這兩個字符的任意序列,用作一元運算符。 +在這個意義上是一個無用的運算符,但它是允許的。
  • \d+ :任何非空數字序列,表示無符號 integer
  • (?1) :遞歸。 這將使用整個正則表達式——除了^$錨點。 -- 以遞歸方式,使用周圍的文字括號。 這允許表達式嵌套。
  • [+^*/-] :任何二元運算符(根據需要擴展更多運算符)
  • (?2) :匹配二元運算符的第二個操作數,重新使用與匹配第一個操作數相同的模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM