2012-07-10 72 views
-4

如何在特定文本中獲取文本? 一樣,如果我有這樣的文字:獲取特定文本中的文本?

'lololol \r asdfasdf r\ gfhfgr'

我怎樣才能得到它返回「asdfasdf」。基本上,獲取位'\r''r\'之間的文本?

+4

你試過了什麼? – 2012-07-10 02:19:17

+0

@JonClements我還沒有嘗試過任何東西......我唯一的線索是使用for循環和一些條件...而那些效率都不高。 – 2012-07-10 03:30:51

回答

4

另一重解決方案,

import re 

s = r'lololol \r asdfasdf r\ gfhfgr' 
pattern = re.compile('\\\\r (.*?) r\\\\') 

print pattern.findall(s) 

結果['asdfasdf']

編輯:

好,花花公子,這就是你說你想要的例子。如果您願意,歡迎您使用

pattern = re.compile('\\\\r(.*?)r\\\\') 

這將代替給你[' asdfasdf ']

'所有的斜線'是需要的,因爲Python的方式和重新解析字符串;斜槓用作象\n(換行符)這樣的有向圖的轉義字符。所以要表示一個斜槓,你必須使用\\有向圖。試試print('\\')看到這個。

然後你必須將它加倍,因爲再次分析字符串是針對它自己的二元圖(\ d代表數字,\ s代表空格等)。所以如果你輸入'\\\\',Python就會明白這是一個由兩個斜線組成的字符串,\\,它傳遞給re,解析它並認爲你正在尋找一個單獨的\字符。

有時你可以不用做這件事而逃脫;如果您有像'\m'這樣的字符串,其中尾部字符不會生成有效的有向圖,則結果實際上是雙字符字符串\m(嘗試print('\m'))。 \ r有點時髦; Python認爲它是一個回車符,但是re不使用\ r作爲二合字母,所以給Python'\ r'或'\\ r'都會導致重新查找字符串'\ r'。我更喜歡雙斜槓,因爲這意味着你不必記住兩個單獨的定義什麼是或不是一個合法的有向圖!另一方面,Python和re都認爲\'是單引號圖(print('\'')打印一個'字符) - 所以這兩個斜槓必須完全雙重轉義或者您會得到一個「嘿,剩下的部分在哪裏?串??」錯誤('字符串未終止')。

另一種方法是輸入原始字符串(r'abc');這告訴Python不要解析字符串中的有向圖,但re仍然會這樣做,所以你的模式必須看起來像

pattern = re.compile(r'\\r(.*?)r\\') 
+2

:) - 可能使捕獲組不貪心雖然...但OP可以決定我猜... – 2012-07-10 02:49:39

+0

@JonClements:好主意,已經這樣做了。 – 2012-07-10 02:54:49

+0

夥計,如果\ r和另一件事物之間沒有空格,則不起作用。另外,爲什麼這麼多「\」?你能解釋一下嗎?或者鏈接到某些東西? – 2012-07-10 03:38:41

2

您可以在Python中使用正則表達式。

>>> import re 
>>> s = 'lololol \r asdfasdf r\ gfhfgr' 
>>> e = re.search(r'\r (?P<boxflux>.*) r\\', s) 
>>> e.group('boxflux') 
'asdfasdf' 

boxflux.com

+0

AttributeError:'NoneType'對象沒有屬性'group' – 2012-07-10 03:34:54

+0

對於命名組。 – 2012-07-10 06:23:54