2010-10-21 141 views
0

我試圖一行一行地檢查文件any_string = any_string。它必須是那種格式,沒有空格或其他任何東西。該行必須包含一個字符串,然後是「=」,然後是另一個字符串,而不是別的。有人可以幫我用python的語法來找到這個嗎? =]Python:模式匹配的字符串

pattern='*\S\=\S*' 

我有這個,但林肯定它錯了,哈哈。

+0

你打算如何使用該模式? – 2010-10-21 06:46:19

+1

另外,我認爲這是一個比Python問題更多的正則表達式問題。只是說! – Chetan 2010-10-21 06:47:59

+0

@chetan:你好點。哈哈 – nubme 2010-10-21 07:54:10

回答

4

不知道您是否正在尋找在=兩側具有相同值的線。如果是,則使用:

the_same_re = re.compile(r'^(\S+)=(\1)$') 

如果值可以不同,然後用

the_same_re = re.compile(r'^(\S+)=(\S+)$') 

在這種regexpes:

  • ^是線
  • $的開頭是行結束
  • \S+是一個或更多的非空格字符
  • \1是第一組的正則表達式的字符串的意思是「原始」的字符串

r之前,所以你不需要逃避串反斜槓。

+0

謝謝!定義每個表達式的作用也會有很大幫助=] – nubme 2010-10-21 07:09:15

+0

您給我的代碼有效,但我如何匹配一個'='? (r'^(\ S +)= {1}(\ S +)$') 似乎不起作用 – nubme 2010-10-21 07:44:46

+1

嘗試:'r'^([^ = \ s] +)=([^ = \ s] + )''''''''括號內'^'不包括字符,在本例中它不包括'='和空格('\ s') – 2010-10-21 09:01:53

1
pattern = r'\S+=\S+' 

如果你希望能夠抓住左,右手邊,您可以添加捕獲組:

pattern = r'(\S+)=(\S+)' 

如果你不想讓多個等號的行(這將做怪異的事情),你可以使用這個:

pattern = r'[^\s=]+=[^\s=]+' 
+0

謝謝,雅我可能需要捕捉它以供以後使用soo .. pattern = r'([^ \ s =])+ =(^ \ s =] +)' – nubme 2010-10-21 07:04:54

1

我不知道你想要什麼使用這種模式的任務。也許你想解析配置文件。 如果這是真的,你可以使用模塊ConfigParser。

1

好的,所以你想找到anystring=anystring,沒有別的。那麼不需要正則表達式。

>>> s="anystring=anystring" 
>>> sp=s.split("=") 
>>> if len(sp)==2: 
... print "ok" 
... 
ok 
+0

這將找到任何一行「=」在裏面。可能需要檢查兩個部件是否都是空的。 – neil 2010-10-21 09:28:01

1

由於Python 2.5我更喜歡這樣分裂。如果你不喜歡空間,只需檢查。

left, _, right = any_string.partition("=") 
if right and " " not in any_string: 
    # proceed 

此外,它永遠不會學會正則表達式。