2017-07-16 33 views
0

我想寫Python正則表達式。 首先,我已經將文件的每一行讀入列表中。然後我遍歷列表。Python的正則表達式(Lookaround)

Q1。我想捕捉時,算術運算符沒有them.Something之間的空間像

捕獲:

a = a+5 

不捕獲:

a = a + 5 

對於這一點,我寫是這樣的:

for i in array: 

     pattern = re.search(r"\S(\+|\-|\*|\\)\S",i) 

\ S:空間以外的任何東西

(+ | - | * | \):數學運算

\ S:什麼比空間

其他但問題是,它捕捉其中後增量運營商正在使用的線路。

捕獲:

a = a++ 

我怎麼能寫一個正則表達式,它不會捕捉其中後增量運營商使用了線。

Q2.I想要捕獲文件中使用多行註釋的位置。

我試着寫下面的表達式,但它沒有捕獲。我不知道我在哪裏做錯了。一定幫助。

for i in array: 

     pattern = re.search(r"\/\*[A-Za-z0-9_]\*\/",i) 

回答

0

對於問題1,您需要一個加號,前面沒有空格或加號,後面沒有空格或加號。這可以寫成

r"(?<![+\s])[+](?![+\s])" 

您可以使用減號而不是加號,星號或斜線來執行相同的表達式。然後將這些表達式與|標誌聯繫起來。

對於問題2,可以嘗試

r"[/][*](?:[^*]|[*](?![/]))*[*][/]" 

當然也不會處理嵌套多評論。對於這些,一個簡單的正則表達式是不夠的。

0

第一個問題可以藉助否定字符類來解決,至少對於當前的示例字符串以及可能更多的情況。您顯示的問題是由於\S與任何非空白字符匹配的事實。要匹配任何非空格的字符,即-,/,+*,甚至可以是(),請使用[^\s+*/()-]取反的字符類。你的第一個正則表達式 - 注意,除法運算符應/,不\ - 可以寫成

pat = r"[^\s+*/()-]([+*/-])[^\s+*/()-]" 

regex demo

第二個是一個解決問題。

pat = r"/\*[^*]*\*+(?:[^/*][^*]*\*+)*/"; 

查看regex demo

詳細

  • /\* - 評開始
  • [^*]*\*+ - 比*另一場比賽中0 +字符,隨後用1 +文字*
  • (?:[^/*][^*]*\*+)* - 的0+序列:
    • [^/*][^*]*\*+ - 不是/*(與[^/*]匹配),隨後用0+非星號字符([^*]*),接着用星號1+(\*+
  • / - 閉/