2015-09-17 46 views
1

我想列出一部分數據除以單個反斜槓。該部分只是一個六位數字。我需要引用反斜槓的原因是,我將使用此代碼獲取更多文件,這些文件可能包含數據組中的其他六位(或更多)數字。如何在Python中使用正則表達式搜索用反斜槓分割的數據

下面是代碼示例:

>>> layer = arcpy.mapping.Layer("J:\abcd\blabla.lyr") 
>>> print layer.dataSource 
C:\Users\416938\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog\... 
>>> result = re.search (r'([a-z]{1}[0-9]{6})', text) 
>>> result.group(0) 
u'416938' 

但我想有這樣的反斜槓(顯然這代碼將無法正常工作):

re.search (r'(\[0-9] {6}\)', text) 

任何幫助是多少讚賞。謝謝。

+2

預計輸出一起提供了一個例子。 –

+0

認爲你需要'\ b' –

+1

是否{6}與空白或數字類相關? – wenzul

回答

1

這裏是代碼,你可以用它來提取6位數的數字,是一個全字

import re 
p = re.compile(ur'\b[0-9]{6}\b') 
test_str = ur"C:\\Users\\416938\\AppData\\Roaming\\ESRI\\Desktop10.0\\ArcCatalog" 
match = re.search(p, test_str) 
if match: 
    print(match.group(0)) 

IDEONE demo

請注意\b - a word boundary - 匹配以下位置:

  • 在字符串中的第一個字符之前,如果第一個字符是單詞字符。
  • 在字符串中的最後一個字符後面,如果最後一個字符是單詞字符。
  • 字符串中的兩個字符之間,其中一個是單詞字符,另一個不是單詞字符。

如果你想匹配內部\...\一個6位數的序列可以使用

(?<=\\)[0-9]{6}(?=\\) 

或者,如果你想匹配一個6位數的序列不與其他數字封閉(如字母間),請使用此正則表達式:

(?<!\d)[0-9]{6}(?!\d) 

它包含2個查找表。 (?<!\d)確保在6位數序列之前沒有數字,並且(?!\d)確保在它後面沒有數字。

+1

謝謝你解釋:) – MetalMuzu

+0

太棒了!現在投票的作品!再次感謝 :) – MetalMuzu

2

你需要躲避反斜線:

re.search (r'(\\[0-9] {6}\\)', text) 
+1

謝謝你,你的回答也很有用。 – MetalMuzu

0

如果Windows路徑將始終具有給定結構C:\Users\[0-9]{6}\... - 在這裏我們去沒有複雜的正則表達式的轉義語法:

>>> text = r"C:\Users\416938\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog" 
>>> match = text.split("\\")[2] # split at \ and grad third element 
'416938' 
>>> if match.isdigit() and len(match) == 6: # check for digit and length 6 
... 
相關問題