我试图列出一部分数据除以单反斜杠。该部分只是一个六位数字。我需要引用反斜杠的原因是我会将此代码用于更多文件,其中可能包括数据组中的其他六个(和更多)数字。
以下是代码示例:
>>> 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)
非常感谢任何帮助。感谢。
答案 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
...