찾다

 >  Q&A  >  본문

正则表达式内用了.*?,如何继续惰性筛选里面的内容?

bVFkzX.png

例如在这个例子中,我想要提取js和css的文件路径,所以我匹配引号和引号中间的内容,然后里面用了 .*? 实现防止贪婪匹配,请问接下来怎么样才能正确的匹配呢?

另外实际的需求并不止于html标签,还可能需要在js or css文件里面提取引用url。 所以想到匹配引号和引号之间的内容,再筛选。

 <link rel="stylesheet" href="assets/css/bootstrap-theme.css">
    <link rel="stylesheet" href="assets/bower_components/angular-loading-bar/build/loading-bar.css">
    <link rel="stylesheet" href="assets/bower_components/font-awesome/css/font-awesome.css">
    <link rel="stylesheet" href="assets/css/ngdropover.css">

<script src="assets/bower_components/angularjs-ie8-build/dist/angular.js"></script>
<script src="assets/bower_components/jquery.browser/dist/jquery.browser.js"></script>
<script src="assets/bower_components/layer/layer.js"></script>


高洛峰高洛峰2940일 전895

모든 응답(2)나는 대답할 것이다

  • 欧阳克

    欧阳克2016-11-11 13:21:53

    对你说的这个问题,简单的办法类似/"[^"]*\.css"/
    或者这样/".*?\.(?:css|js)"/

    회신하다
    0
  • 三叔

    三叔2016-11-11 13:21:40

    我用python测试了一个很简单的正则, 匹配时忽略大小写; 鉴于你还有其他模式的只要把格式串中的前后双引号去掉, 只匹配js或者css路径即可:

    ([^"'\s]*\.css|[^"'\s]+\.js)

    import re
    import pprint
    
    content_of_html = '''
    
    
    
    
    
    
    
    
    
    ngRapProvider.script = 'http://rap.cxb123.com:9090/rap.plugin.js?projectId=6';  // 提取点一
      // 如果这个也能提取更好了..
      // 提取点二
    '''
    
    pprint.pprint(re.findall('''([^"'\s]*\.css|[^"'\s]+\.js)''', content_of_html, re.I))
    
    
    λ  ~/  python x.py 
    ['assets/css/bootstrap-theme.css',
     'assets/bower_components/angular-loading-bar/build/loading-bar.css',
     'assets/bower_components/font-awesome/css/font-awesome.css',
     'assets/css/ngdropover.css',
     'assets/bower_components/angularjs-ie8-build/dist/angular.js',
     'assets/bower_components/jquery.browser/dist/jquery.browser.js',
     'assets/bower_components/layer/layer.js',
     'http://rap.cxb123.com:9090/rap.plugin.js',
     'assets/css/build-common-index.css',
     'assets/css/common.css']


    회신하다
    0
  • 취소회신하다