2013-02-18 65 views
4

我有一個很難搞清楚如何從一個主機名剝離去年同期條上期...蟒蛇:從主機串

電流輸出:

  • domain.com。
  • suddomain.com。
  • domain.com。
  • subdomain.subdomain.com。
  • subdomain.com。

期望的輸出:

  • domain.com
  • subdomain.com
  • domain.com
  • subdomain.subdomain.com

嘗試1:

print string[:-1] #it works on some lines but not all 

嘗試2:

str = string.split('.') 
subd = '.'.join(str[0:-1]) 
print subd # does not work at all 

代碼:

global DOMAINS 

if len(DOMAINS) >= 1: 
    for domain in DOMAINS: 
    cmd = "dig @adonis.dc1.domain.com axfr %s |grep NS |awk '{print $1}'|sort -u |grep -v '^%s.$'" % (domain,domain) 
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) 
    string = p.stdout.read() 
    string = string.strip().replace(' ','') 
    if string: 
     print string 
+0

嘗試1將適用於所有測試用例,您能否提供一個失敗的示例? – igon 2013-02-18 23:24:29

+0

打印字符串[: - 1] ...除了最後一個子域外都失敗 – 2013-02-18 23:27:59

回答

13

你不喜歡這樣:

hostname.rstrip('.') 

其中hostname是包含域名的字符串。

>>> 'domain.com'.rstrip('.') 
'domain.com' 
>>> 'domain.com.'.rstrip('.') 
'domain.com' 
+0

由於某些原因,我無法獲得此功能。 – antman1p 2017-11-23 19:22:37

2

正則表達式是:

(.+)\. 

沒有.您現在在捕捉組1

+0

你能解釋一下(。+)\是什麼。做?我必須擺脫一個,。在一個字符串的末尾,這就做了訣竅。以下是我實施的。 dot_filtering = re.compile(「(?P (。+)\。[^,])」)我知道^,在[]中會照顧逗號。 \。它爲了逃避。但不知道t(。+)是多少次發生的。 – Jiraheta 2015-05-21 21:34:10

+1

@Jiraheta在正則表達式中,'.'字符匹配任何字符。 「+」是許多人的量詞,但至少有一次出現。 '。+'只是表示匹配任何字符,但至少需要一個字符。最後,我們想要匹配一個實際的時間段,而不是任何字符,所以它會被\轉義。此模式查找至少一個長度的任何字符的字符串,後跟一個句點。它將帶有句點的字符串放入捕獲組1.我希望這有助於! – 2015-06-11 22:55:24

-3

我放棄了,只用sed的,而不是....

cmd = "dig @adonis.dc1.domain.com axfr %s |grep NS |awk '{print $1}' |sort -u |grep -v '^%s.$'|sed -e 's/.$//'" 
+3

@isedev給你你正在尋找的答案(實際上是最簡單的答案)。這應該是被接受的答案。 – 2013-02-19 02:13:50

+0

建議你獎勵@ isedev的回答投票 – 2016-07-12 10:21:40