簡體   English   中英

編寫python正則表達式以匹配點和數組索引

[英]Write a python regular expression for matching dot and array indices

我需要匹配適當的變量訪問字符串ex。

employeeobj.empid
employeeobj.grades[0].grade
employee[0]
employee.dept.location.room[0]

幾個例子-

employeeobj.[] Invalid
.employeeobj Invalid
[]employeeobj Invalid
employeeobj.dept. Invalid

employeeobj.dept valid
employeeobj.dept[9] valid
employeeobj[1].dept valid

我需要正則表達式在python中

更具體地說,我需要匹配所有字符串

  • 不能以點,開頭或結尾的方括號開頭
  • 不以圓點結尾,並打開方括號
  • 並排沒有點
  • 有適當的方括號和適當的整數索引
  • 方括號中總是跟有一個點,只有在末尾才例外,那么就不需要點了

謝謝

沒有答案

這就是使用pyparsing可以做到的

from pyparsing import *
#see https://stackoverflow.com/questions/36428652/pyparsing-is-it-possible-to-globally-suppress-all-literals
ParserElement.inlineLiteralsUsing(Suppress)
#the grammar
ident = Word(alphas, alphanums)
elem = Group(ident + Optional('[' + Regex('\d+') + ']'))
expr = elem + ZeroOrMore('.' + elem)

tests = ['employeeobj.[]',
         '.employeeobj',
         '[]employeeobj',
         'employeeobj.dept.',
         'employeeobj.dept',
         'employeeobj.dept[9]',
         'employeeobj[1].dept[2].head']

for s in tests:
    print s
    try:
        print expr.parseString(s, True).asList()
    except ParseException:
        print 'no match'
    print

產出

employeeobj.[]
no match

.employeeobj
no match

[]employeeobj
no match

employeeobj.dept.
no match

employeeobj.dept
[['employeeobj'], ['dept']]

employeeobj.dept[9]
[['employeeobj'], ['dept', '9']]

employeeobj[1].dept
[['employeeobj', '1'], ['dept', '2'], ['head']]

但是,與re相比,Pyparsing非常慢,可能無法很好地完成您的任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM