当前位置: 首页 > 知识库问答 >
问题:

Regex解析配置文件,其中#符号表示注释

章子航
2023-03-14

用绳子

Test=Hello World #Some more text
Test=Hello World

我需要捕获“测试”组和“Hello World”组。如果字符串以“#”开头,则根本不应捕获它。

以下表达式分别适用于第一个和第二个字符串:

^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])
^((?!#).+)(?:=)(.+[\S])

如何在两个非捕获正则表达式组之间执行按位逻辑OR?

我试着做一些

^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])|(?:.*)

但却无法正确计算。

更多细节

背景:这是在C#(.NET Framework 4.0)中完成的。正在逐行读取文件。均衡器符号左侧的文本表示变量名称,均衡器符号右侧的文本表示变量的值。此文件正在用作配置文件。

一般情况:

注意:所有尾随空格-不应捕获最后一个非空格字符结尾后的任何空格。这还包括第二组的末尾和磅符号之间的任何空格。

1)所有字符,除了空格,后面紧跟着一个均衡符号,后面紧跟着一组字符,后面跟着一个空格和一个磅符号。

this=is valid #text
s0_is=this #text
and=th.is #text
the=characters after the    # Pound sign are irrelevant

2) 情况与案例1完全相同,只是第二个捕获组和磅号之间没有尾随空格。例如

this=is valid#text
s0_is=this#text
and=th.is#text
the=characters after the# Pound sign are irrelevant

3) 与案例一和案例二相同的情况;但是,如果根本没有#符号(请参见上面关于尾随空格的注释)。例如

this=is valid
s0_is=this
and=th.is
the=characters after the

对于这三种情况,捕获组应分别如下所示(用|符号区分捕获组):

this|is valid
s0_is|this
and|th.is
the|characters after the

特殊情况:

1)该行的第一个字符是#符号。这应该不会导致捕获任何内容。

2) #符号出现在=符号之后。这将导致第二个捕获组为空。

3)#符号出现在上面没有明确说明的任何其他地方。这应该会导致没有捕获任何内容。

4)新行的第一个字符前面不应该有空格;但是,这种情况实际上不太可能发生。

5) 均衡器符号后面的空格无效。

无效案例(不应该捕获任何内容):

th is=is not valid#text
nor =this#text
 or_this=something
also= this

共有2个答案

胡墨竹
2023-03-14
^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])|(?:.*)

意思是匹配

^((?!#).+)(?:=)(.+[\S])(?:[\s]*[#])

(?:.*)

试试这个

^((?!#).+)(?:=)(.+[\S])(?:(?:[\s]*[#])|(?:.*))

虽然(?:.*)看起来有点毫无意义,但你为什么不试试这样的东西呢:

^((?!#).+)(?:=)(.+?\S)(?:\s*[#])?

这将有选择地匹配最后一组,这是我认为您正在尝试的,在这种情况下,这将是更好的选择。

洪越泽
2023-03-14

我怀疑你让这变得更加困难。试试这个正则表达式:

^(\w+)=([^\s#]+(?:[ \t]+[^\s#]+)+)

我使用了[\t]而不是\s来防止它匹配换行符并溢出到下一行——当然,假设输入确实是多行的。如果喜欢的话,您仍然可以将其应用于独立字符串。

编辑:为了回答您的评论,请尝试以下正则表达式:

^(\w+)=(\w+(?:[ \t]+\w+)*)

在第一个正则表达式中,我试图避免做出狭隘的假设,我有点得意忘形。如您所见,如果您可以对所有单词使用\w,它会变得容易得多。

 类似资料:
  • 本文主要介绍app.cfg这个文件的配置及一些参数的解释 kplcloud启动时必须传app.cfg文件,所有的参数都通过该文件进行控制,若您是在kubernetes进行部署可以考虑通过ConfigMap的方式挂载进容器里。 [server] 应用配置 字段 备注 其他 http_static 静态文件路径 ./static/ http_proxy 代理服务地址 如果您的环境是隔离的,又需要访问外

  • C语言面向对象编程(六):配置文件解析 在实际项目中,经常会把软件的某些选项写入配置文件。 Windows 平台上的 INI 文件格式简单易用,本篇文章利用《C语言面向对象编程(五):单链表实现》中实现的单链表,设计了一个“类” ini_parser 来读写 INI 格式的配置文件。 struct ini_parser 可以解析 INI 格式的字符串、文件,也可以将内存中的符合 INI 格式的数据

  • 这是一个用来解析文件的库,它的设计思路来自于 database/sql,目前支持解析的文件格式有 ini、json、xml、yaml,可以通过如下方式进行安装: go get github.com/astaxie/beego/config 如果你使用xml 或者 yaml 驱动就需要手工安装引入包 go get -u github.com/astaxie/beego/config/xml 而且

  • 我正在Intellij中创建一个Spring MVC项目,当我创建类时,Intellij无法识别注释,它会出现“无法解决符号”错误。即使我使用了“导入org.springframework.context.annotation.配置”,但它也无法识别“springFramework”。有人能帮我吗? 这是我的pom。xml

  • 我有几个用于Eclipse的文件(我使用的是Eclipse Oxyox),下面是一个示例 请注意,我正在使用变量,以便使其可用于任何项目。 我试图将我为项目启用的概要文件“注入”到通用的启动概要文件配置中,类似于变量,但与当前的Maven概要文件相关。 如果不能这样做,我需要为每个环境创建一个启动配置文件,这意味着每个目标要启动3个文件。 是否有一种方法可以使用/创建一个Eclipse变量,该变量

  • 本文向大家介绍Mybatis中的config.xml配置文件详细解析,包括了Mybatis中的config.xml配置文件详细解析的使用技巧和注意事项,需要的朋友参考一下 经过前面的文章,我觉得对Mybatis的正题理解已经足够了,但是对Mybatis的使用,我觉得还是会有一点的模糊,就我个人而言,我觉得掌握好Mybatis框架,主要要明白三个文件,第一个就是等下要谈论的Mybatis-comfi