2017-05-04 19 views
-3

我需要使用Python RegEx從ping命令中提取主機名。我不明白爲什麼我的正則表達式找到第一行小寫,但不是大寫。欣賞是否有人可以提出備用解決方案。感謝Python RegEx不能使用大寫?

Pinging\s?(\w*)[^A-Z]*(?=.domain.com) 

執行ping abc1-de-fgh.domain.com [127.0.0.1]與32個字節的數據: - 發現這一個

執行ping ABC1-DE-FGH.domain.com [127.0。 0.1]與32個字節的數據: - 不覺得這是一個

+1

你的第二個輸入行沒有'.domain.com'。所以它不應該匹配 – RomanPerekhrest

+0

使用像'/ Pinging([\ w .-] +)/'更簡單的東西。然後從該捕獲中獲取主機名。 – Brandin

+0

主機名「abc1-de-fgh」和「ABC1-DE-FGH」? '\ w *'與第一個例子中的'abc1'匹配,所以你只需要使用'Pinging \ s +([^。] +)'('[^。] +' .')。 –

回答

0

你得到一個匹配這樣的第一輸入:

  • PingingPinging
  • 匹配
  • \s?
  • abc1匹配匹配並捕獲與(\w*)
  • -de-fgh[^A-Z]*
  • (?=.domain.com)匹配斷言有任何字符+ domain +任何fgh後右炭+ com

第二正則表達式不因爲大寫字符那不能[^A-Z]*匹配的匹配。 Pinging ABC1部分的匹配方式與上面相同,但-不能與(\w*)匹配,並且[^A-Z]*匹配除大寫字符之外的任何0+字符。

使用

Pinging\s?([^.]*)(?=\.domain\.com) 

其中[^.]*.其他任何字符0+匹配(見demo)或簡單的

Pinging\s?(.*?)(?=\.domain\.com) 

.*?懶點匹配模式匹配任何字符0+,儘可能少儘可能。 See another demo