删除不在引号内的哈希注释

2024-03-19

我正在使用 python 来浏览文件并删除所有注释。评论被定义为散列及其右侧的任何内容只要哈希值不在双引号内。我目前有一个解决方案,但它似乎不是最佳的:

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 循环的情况下找到不在引号内的第一个哈希(即通过正则表达式?)

例子:

' "Phone #":"555-1234" ' -> ' "Phone #":"555-1234" '
' "Phone "#:"555-1234" ' -> ' "Phone "'
'#"Phone #":"555-1234" ' -> ''
' "Phone #":"555-1234" #Comment' -> ' "Phone #":"555-1234" '

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

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”:

filelines = []
r = re.compile(r'(?:"(?:[^"\\]|\\.)*"|[^"#])*(#|$)')
for line in f:
    m = r.match(line)
    filelines.append(line[:m.start(1)])

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标记并一次输入一行。如果有的话,它将捕获第一个未加引号的哈希值作为组 1,因此您可以使用match.start(1)来获取索引。如果您希望能够在字符串中放置反斜杠转义的引号,它不处理反斜杠转义。这是未经测试的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除不在引号内的哈希注释 的相关文章

随机推荐

  • 有意传递文件,我如何检索它

    这就是我要传递的内容 pictureFile is a File Intent intent new Intent context ShowPicActivity class intent putExtra picture pictureF
  • 如何在 IntelliJ IDEA 中设置和运行/调试 ElasticSearch

    我正在尝试了解 ES 的工作原理 但是我无法从 IDE 运行它 我想运行 2 3 3 构建 它仍然使用 Maven 作为其构建系统 但不断出现错误 有人可以告诉我在详细下载存储库后如何在 IDEA 中执行此操作吗 配置等 我从github下
  • Django:无法更改默认语言

    我已经开发了一段时间了en gb语言代码 现在临近发布日期 我打算将默认语言切换为en us 但无论我最初做什么request LANGUAGE CODE被设定为en gb即使对于未注册的用户 仅供参考 我实际上想将时区保留为伦敦 并将默认
  • 如何在 Firefox 中禁用 Ctrl + Shift + C 快捷键?

    Pressing Ctrl Shift C in Firefox opens the developer tools and activates the Pick element tool 当我想要复制某些内容时 我经常错误地使用此快捷方式
  • 如何在java中逐行上传文件到谷歌云存储

    我有以下代码 String fullFileUrl fileUrl Storage storage StorageServiceHolder getStorage BlobId blobId GCSHelper uri2blobId ful
  • 会话数据在本地工作但不在 ipage 服务器上

    我已经尝试调试这个问题几个小时了 但没有成功 我有这两个文件 我的第一个文件 session start SESSION user 1 我的第二个文件 session start print r SESSION echo SESSION u
  • 根据输入将日期添加到框架中

    我有一个 R 数据集的输入变量 用于评估工具列表 它看起来如下 type lt as integer readline prompt Enter a Barcode 我有两列 一列包含通过输入语句找到的信息 一组条形码编号 另一列包含将特定
  • VS导出的模板不适用于新项目

    我已将以下工作项目导出为 VS 模板 该模板使用 ASP NET 5 RC1 https github com mohasi vs spa template https github com mohasi vs spa template 当
  • Python defaultdict 行为可以通过多处理实现吗?

    我不确定这是否可能 希望如此 我有一个数据集 我通过使用 defaultdict 的过程运行它 DefaultDict 有一个功能 如果您搜索某些内容并且它不在字典中 它就会被添加 在我的例子中 我正在搜索它们正在添加的值 然后我稍后会搜索
  • 我正在使用 PhoneGap,在我的页面中我尝试使用 FontAwesome 但它不起作用?

    我使用 PhoneGap for Android 创建了应用程序 并在应用程序中使用 FontAwesome 图标 但我看不到图标 只能看到方块 我像这样包含 FontAwesome 我这样使用它 i class icon circle i
  • javascript html5 使用来自不同域的图像绘制图像

    所以我有以下代码 var element document getElementById myCanvas var width element width var height element height var context elem
  • 将地图限制在一定范围内?

    有没有办法设置地图边界并实际上限制用户只能在这些边界内平移 我最接近我需要的是mapView fitBounds方法 但它似乎根本不限制平移 我做错了什么或者这个方法没有达到我的需要吗 我正在使用 SKMaps iOS SDK 版本 2 5
  • 使用 SQL 查找不同值

    显示摘要中含有 discover discoverer discovery discovered discovering 等词的20个奖项的名称和奖项金额 我的查询 SELECT title count award abstract FRO
  • 获取当前活动的键盘语言为 NSLocale

    我已经找到了很多方法 但没有有效的解决方案 这是我尝试过但没有成功的方法 1 简单调用主要语言 UITextInputMode primaryLanguage 总是返回 nil 2 订阅UITextInputCurrentInputMode
  • 如何在给定特定 PID 的情况下终止 Java 中的进程

    如果我有特定的 PID 如何在 Windows 上从 Java 代码中终止特定进程 除了执行特定的操作之外 我不知道任何其他解决方案Windows命令就像Runtime getRuntime exec taskkill F PID 827
  • 为什么在尝试更新 OData 服务时 HttpWebRequest.GetResponse() 会挂起?

    我正在用 C 编写一个 OData 消费者 我可以成功删除一个条目 但由于某种原因 当我尝试更新时 它只是挂起 冻结在 GetResponse 上 它甚至忽略了我的超时 下面是我的测试代码 有什么明智的建议吗 XDocument doc X
  • 在 C 中取消引用字符串文字有什么影响?

    include
  • 在移动设备上拖放 HTML

    当您使用JavaScript向网页添加拖放功能 例如jQuery UI可拖放 时 如何在通过移动设备上的浏览器查看时使其发挥作用 在移动设备上 触摸屏的拖动操作会被拦截手机用于滚动页面等 欢迎所有解决方案 我最初的想法是 为移动设备提供一个
  • scriptcs - 无法读取包

    我关注了一个博客文章 http inaspiralarray blogspot com 2013 08 scriptcs in two minutes html只需两步即可运行 scriptcs 基本上 我是这样做的 powershell
  • 删除不在引号内的哈希注释

    我正在使用 python 来浏览文件并删除所有注释 评论被定义为散列及其右侧的任何内容只要哈希值不在双引号内 我目前有一个解决方案 但它似乎不是最佳的 filelines r re compile for line in f m r spl