如何使用Python中的正则表达式搜索由反斜杠分割的数据

时间:2015-09-17 08:11:58

标签: python regex arcgis backslash arcpy

我试图列出一部分数据除以单反斜杠。该部分只是一个六位数字。我需要引用反斜杠的原因是我会将此代码用于更多文件,其中可能包括数据组中的其他六个(和更多)数字。

以下是代码示例:

>>> 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)

非常感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:2)

你需要逃避反斜杠:

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

答案 1 :(得分: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)确保后面没有数字。

答案 2 :(得分: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
...