首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >删除不在引号内的散列注释

删除不在引号内的散列注释
EN

Stack Overflow用户
提问于 2013-07-22 07:12:28
回答 3查看 1.9K关注 0票数 5

我正在使用python来浏览一个文件并删除任何注释。只要注释不在双引号内,注释就被定义为哈希及其右边的任何内容。我目前有一个解决方案,但它似乎不太理想:

代码语言:javascript
运行
AI代码解释
复制
filelines = []
    r = re.compile('(".*?")')
    for line in f:
        m = r.split(line)
        nline = ''
        for token in m:
            if token.find('#') != -1 and token[0] != '"':
                nline += token[:token.find('#')]
                break
            else:
                nline += token
        filelines.append(nline)

有没有一种方法可以在没有for循环的引号中找到第一个哈希(即通过正则表达式)?

示例:

代码语言:javascript
运行
AI代码解释
复制
' "Phone #":"555-1234" ' -> ' "Phone #":"555-1234" '
' "Phone "#:"555-1234" ' -> ' "Phone "'
'#"Phone #":"555-1234" ' -> ''
' "Phone #":"555-1234" #Comment' -> ' "Phone #":"555-1234" '

编辑:这里是由user2357112创建的纯正则表达式解决方案。我测试了它,它运行得很好:

代码语言:javascript
运行
AI代码解释
复制
filelines = []
r = re.compile('(?:"[^"]*"|[^"#])*(#)')
for line in f:
    m = r.match(line)
    if m != None:
        filelines.append(line[:m.start(1)])
    else:
        filelines.append(line)

有关此正则表达式工作原理的更多细节,请参见他的答复。

Edit2:下面是user2357112代码的一个版本,我对其进行了修改,以说明转义字符(\")。这段代码还通过包含对字符串结尾($)的检查来消除'if‘:

代码语言:javascript
运行
AI代码解释
复制
filelines = []
r = re.compile(r'(?:"(?:[^"\\]|\\.)*"|[^"#])*(#|$)')
for line in f:
    m = r.match(line)
    filelines.append(line[:m.start(1)])
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-22 07:36:50

代码语言:javascript
运行
AI代码解释
复制
r'''(?:        # Non-capturing group
      "[^"]*"  # A quote, followed by not-quotes, followed by a quote
      |        # or
      [^"#]    # not a quote or a hash
    )          # end group
    *          # Match quoted strings and not-quote-not-hash characters until...
    (#)        # the comment begins!
'''

这是一个冗长的正则表达式,设计用于在一行上操作,所以请确保使用re.VERBOSE标志,并一次只输入一行。如果存在第一个未引用的散列,它将捕获第一个未引用的散列,因此可以使用match.start(1)获取索引。它不处理反斜杠转义,如果你想要将反斜杠-转义引号放在一个字符串中。这是未经检验的。

票数 3
EN

Stack Overflow用户

发布于 2013-07-22 07:40:51

可以使用此脚本删除注释:

代码语言:javascript
运行
AI代码解释
复制
import re
print re.sub(r'(?s)("[^"\\]*(?:\\.[^"\\]*)*")|#[^\n]*', lambda m: m.group(1) or '', '"Phone #"#:"555-1234"')

这样做的目的是捕捉双引号中包含的第一部分,并在搜索锐利之前将其替换为自己:

代码语言:javascript
运行
AI代码解释
复制
(?s)              # the dot matches newlines too
(                 # open the capture group 1
    "             # "
    [^"\\]*       # all characters except a quote or a backslash
                  # zero or more times
    (?:           # open a non-capturing group
        \\.       # a backslash and any character
        [^"\\]*   # 
    )*            # repeat zero or more times
    "             # "
)                 # close the capture group 1

|                 # OR

#[^\n]*           # a sharp and zero or one characters that are not a newline.
票数 3
EN

Stack Overflow用户

发布于 2013-07-22 08:10:08

这段代码太难看了,我不得不把它发出来。

代码语言:javascript
运行
AI代码解释
复制
def remove_comments(text):
    char_list = list(text)
    in_str = False
    deleting = False
    for i, c in enumerate(char_list):
        if deleting:
            if c == '\n':
                deleting = False
            else:
                char_list[i] = None
        elif c == '"':
            in_str = not in_str
        elif c == '#':
            if not in_str:
                deleting = True
                char_list[i] = None
    char_list = filter(lambda x: x is not None, char_list)
    return ''.join(char_list)

不过,似乎很管用。虽然我不确定它如何处理windows和linux之间的换行符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17791143

复制
相关文章
[1207]ImportError:无法导入名称“ RandomizedLogisticRegression”
ImportError:无法导入名称“ RandomizedLogisticRegression”
周小董
2023/10/10
4530
[1207]ImportError:无法导入名称“ RandomizedLogisticRegression”
ImportError:无法导入名称“ RandomizedLogisticRegression”
周小董
2023/10/10
4480
FastDFS依赖无法导入
FastDFS依赖无法导入 fastdfs-client-java 导入爆红 <!-- FastDFS--> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.29-SNAPSHOT</version> </dependency> 解决方法 1.先从 github 上拉取下来 fastdfs-client-java 项目 gi
张小驰出没
2021/12/06
1.2K0
FastDFS依赖无法导入
@EnableConfigServer 注解无法导入
最近构建springboot项目,用到了该注解一直无法导入,一开始怀疑是家里网络问题,或者版本原因,后来排查到了原因所在
全栈程序员站长
2021/04/07
1.3K0
PyCaret 成功解决无法从‘sklearn.model_selection._search‘导入名称“_check_param_grid”
这是因为在 sktime 依赖项中使用了来自 sklearn 的私有方法。由于 sklearn 更新为 1.1.0,这个私有方法被删除/移动,因此它正在崩溃。sktime 团队正在努力解决这个问题。同时,您可以通过强制安装 sklearn 1.0.2 来修复此问题。
叶庭云
2022/06/25
1.3K0
PyCaret 成功解决无法从‘sklearn.model_selection._search‘导入名称“_check_param_grid”
LINUX下gdb无法debug,提示ImportError: No module named 'libstdcxx'
Ubuntu下使用gdb调试C++程序,提示:ImportError: No module named ‘libstdcxx’。貌似CentOS没有这样的问题。
卡尔曼和玻尔兹曼谁曼
2019/01/22
2.3K0
如何批量导入名称没有规律的图片
大家在使用条码标签软件制作标签时,会遇到批量导入图片的情况,比如制作产品标签时需要放上产品图片,工作证或者学生证要放上证件照片,而且图片和内容要一一对应,不能搞错。图片一般都按照有规律的序列号命名,但是也有时没有规律,比如证件照片可能是按照姓名来命名的。下面我们就用一个例子详细介绍如何批量导入这样的图片。
神奇像素科技
2021/12/17
1.2K0
如何批量导入名称没有规律的图片
Python导入自定义模块ImportError: No module named 'xxx'问题
Python导入自定义模块ImportError: No module named 'xxx'问题
芥末鱿鱼
2022/05/05
2.1K0
python3无法导入cPickle
python3中cPickle模块已经更名为_pickle,所以在python3中导入时可以使用:
周小董
2019/03/25
2.5K0
python ImportError:
 >>> import paramiko Traceback (most recent call last): File "<stdin>", line 1, in <module> python ImportError: No module named paramiko 模块没有安装 接下来安装 root@scpman:~# apt-cache search python* |grep paramiko python-paramiko - Make ssh v2 connections with Python apt-get install python-paramiko root@scpman:~# python Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import paramiko /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken RandomPool_DeprecationWarning) >>> import paramiko >>> >>> print "www.scpman.com" www.scpman.com >>> 现在好用了
py3study
2020/01/06
5440
Crontab和sudo中无法使用TensorFlow ImportError libcublas.so.9.0
最近因为特殊的原因重新安装了python,但是引发了一个很严重的问题——TensorFlow不好使了。
用户1154259
2019/01/03
1.6K0
如何将文件名称批量导入excel
不给赞赏的话给个赞或者关注下公众号TungHsu吧,不会让你失望的,好玩的数据,免费的软件,学习资料和方法。
用户1315847
2018/07/26
4.7K0
如何将文件名称批量导入excel
条码软件如何批量导入名称没有规律的图片
目前在很多标签上都有这样或那样的图片,比如产品标签上的产品图片,工作证学生证等证件上面的证件照片,都需要准确无误的打印在相应的证件上,下面我们就来详细看一下图片名称没有规律的情况下如何批量导入图片:
中琅条码软件
2019/10/10
9180
条码软件如何批量导入名称没有规律的图片
ImportError: No modu
报错:ImportError: No module named bs4 我的Python版本 python --version python 2.7.5 按照网上方法尝试安装BeautifulSoup无果,BeautifulSoup据说能在python2的版本很好兼容,在python3版本兼容不是太好。 yum install BeautifulSoup     (不可行) yum install bs4               (不可行) 正确解决方法 yum install python-beautifulsoup 启发 rpm -qa|grep python可以看到python许多兼容库 安装的版本是 python-BeautifulSoup-3.2.1-7.el7.noarch 使用from bs4 import BeautifulSoup任然报错 使用import BeautifulSoup不报错
py3study
2020/01/08
3690
eclipse无法解析导入 java.util
eclipse无法解析导入 java.util是因为jre配置错误。 1、点击需要导入jar的项目,右击项目属性(properties),进入到如下图界面: 2、选择Java Build Path选项
庞小明
2018/03/07
2.8K0
eclipse无法解析导入 java.util
ImportError: No mod
  File "/usr/local/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
py3study
2020/01/08
6370
Java-解决无法导入项目
用Eclipse导入项目(他人项目或者从网上下载的项目)有时会提示No projects are found to import的信息,从而Eclipse无法导入该项目。
wangmcn
2022/07/25
2.1K0
Java-解决无法导入项目
Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
ImportError: cannot import name ‘build_info’
用户1148525
2019/05/26
4.6K0
java中无法解析为类型_java无法解析导入的包
.odt文件是openoffice软件产生的文档格式,可以直接用office打开,这其实就是一个压缩包,可以使用解压软件打开,里面有一个content.xml文件,这个文件内有<text:p>标签,标签内就是展示出来的内容。
全栈程序员站长
2022/10/28
4.9K0
Python中ImportError:
Python脚本在编译的时候,经常会遇到ImportError: No module named *** 的错误 错误提示: ImportError: No module named request 问题分析: 原因是Python中有些模块未导入。 解决方法: 检查 from *** import *** 中模块名称是否有错误,如果没有错,就通过命令行 pip install *** 下载该模块,如果安装不成功,可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/ 搜索下载。
py3study
2020/01/13
1.3K0

相似问题

ImportError:无法导入名称_aligners [ImportError]

05

ImportError:无法导入名称

54

ImportError:无法导入名称

23

ImportError:无法导入名称-

24

ImportError:无法导入名称

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文