跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 正则表达测试器通过,但在 re 里报错…
未分類
24 2 月 2021

正则表达测试器通过,但在 re 里报错…

正则表达测试器通过,但在 re 里报错…

資深大佬 : qazwsxkevin 2

getvarValue 这个函数没能写成万金油,但还是能正确析出遇到 JavaScript 的变量,今天遇到一个情况:
var xxx= yyy,对方书写的变量名和等号之间,没有任何字符,就无法析出内容了,于是改了一下正则式,
在测试器里是没问题,能匹配上的,但在 Python 里不行,会报错,请问是怎么回事呢?
谢谢解答了!

# 获取 str 内容中,JavaScript 格式的变量参数内容 def getvarValue(SrcStr,sStr,eStr):     import re     searchStr = "(?<={}[s|s+|]=[s|s+| ]).*?(?={})".format(sStr,eStr) #能应对标准的 JS 定义变量写法     tmpStr = re.findall(searchStr,SrcStr)     if len(tmpStr) == 1:         return str(tmpStr[0])     else:         return str(tmpStr)  SampleText =  " var TeacherID=  667A28;" result = getvarValue(SampleText,'TeacherID',';')  # 函数没有内容返回,在正则测试器里,确实无法匹配上, # 在正则测试里里面,改为(?<=TeacherID[s|s+|]?=[s|s+| ]).*?(?=;) # 验证匹配通过   在 Python 中改为: searchStr = "(?<={}[s|s+|]?=[s|s+| ]).*?(?={})".format(sStr,eStr) 就报错:     raise error("look-behind requires fixed-width pattern") sre_constants.error: look-behind requires fixed-width pattern  

请问应该怎么破?

大佬有話說 (3)

  • 資深大佬 : iBugOne

    Python 自带的 `re` 模块不支持变长的 look-behind,也就是 `(?<=)` 里面的表达式不能有 `*?+{}` 这类长度(重复)修饰符。

    推荐的做法是 pip 安装 regex 这个模块,就可以直接用了,你甚至可以 `import regex as re` 而不用担心兼容性问题。

    Debian 等发行版里有 `python3-regex` 这个包可以用 apt 安装,效果一样。

  • 資深大佬 : GeruzoniAnsasu

    可以直接用分组来代替前后向断言,基于分组捕获下来的内容来做判断而不要直接用断言匹配全句,这样能最大程度保证兼容性

  • 資深大佬 : zyb201314

    #Python3.6 测试通过.
    import re
    def getvarValue(SrcStr,sStr,eStr):
    searchStr = “[{}]s*=s+(w+?)[{}]”.format(sStr,eStr) #能应对标准的 JS 定义变量写法
    tmpStr = re.findall(searchStr,SrcStr)
    if len(tmpStr) == 1:
    return str(tmpStr[0])
    else:
    return str(tmpStr)

    SampleText = ” var TeacherID= 667A28;”
    result = getvarValue(SampleText,’TeacherID’,’;’)
    print(result)
    #一>667A28

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具