Notepad ++正则表达式替换选择所有文本在RegExr中工作

如何解决Notepad ++正则表达式替换选择所有文本在RegExr中工作

我正在尝试用逗号替换日志文件中的所有空格(以将其转换为CSV格式)。但是,某些日志条目包含我不想替换的空间。这些条目由引号引起来。我看了几个示例,并提出了以下代码,这些代码似乎可以在RegExr.com和regex101.com中使用。

[\s](?=(?:"[^"]*"|[^"])*$)

但是,当我使用该表达式进行查找/替换时,它会正确运行,直到用空格将第一个引号引起来,然后选择文件的全部内容

示例日志文件条目:

date=2020-08-24 time=07:35:15 idseq=216296511061885345 itime="2020-08-24 07:35:15" euid=3 epid=4107 dsteuid=3 dstepid=101 type="utm" subtype="webfilter" level="notice" action="passthrough" msg="URL belongs to an allowed category in policy"

所需结果:

date=2020-08-24,time=07:35:15,idseq=216296511061885345,itime="2020-08-24 07:35:15",euid=3,epid=4107,dsteuid=3,dstepid=101,type="utm",subtype="webfilter",level="notice",action="passthrough",msg="URL belongs to an allowed category in policy"

RegExr结果:

RegExr

编辑:经过更多测试,似乎只有一行可以进行替换。但是,如果您有多行,它将用替换字符(在我的情况下是逗号)替换所有行。

解决方法

虽然很长,但是如果您有一个已知的值列表,则可以简单地将它们用作替换键

  • 第一个值被跳过,因为它不应该以{{1​​}}作为前缀
  • 必须确保在标签周围捕获, ,以确保(尽管不能保证不会在=字段中找到子字符串)
msg

Python示例

's/ (time|idseq|itime|euid|epid|dsteuid|dstepid|type|subtype|level|action|msg)=/,$1='

您可能会发现一些包含import re >>> source = '''date=2020-08-24 time=07:35:15 idseq=216296511061885345 itime="2020-08-24 07:35:15" euid=3 epid=4107 dsteuid=3 dstepid=101 type="utm" subtype="webfilter" level="notice" action="passthrough" msg="URL belongs to an allowed category in policy"''' >>> regex = ''' (time|idseq|itime|euid|epid|dsteuid|dstepid|type|subtype|level|action|msg)=''' >>> print(re.sub(regex,r",\1=",source)) # raw string to prevent loss of 1 date=2020-08-24,time=07:35:15,idseq=216296511061885345,itime="2020-08-24 07:35:15",euid=3,epid=4107,dsteuid=3,dstepid=101,type="utm",subtype="webfilter",level="notice",action="passthrough",msg="URL belongs to an allowed category in policy" 或类似值的值,甚至可以破坏非常小心的正则表达式!

还请注意,对于CSV,您可能希望完全替换字段名称

,
  • Ctrl + H
  • 查找内容:"[^"\r\n]+"(*SKIP)(*FAIL)|\h+
  • 替换为:,
  • 检查 环绕
  • 检查 正则表达式
  • 全部替换

说明:

"[^"\r\n]+"     # everything between quotes
(*SKIP)(*FAIL)  # kip and fail  the match
|               # OR
\h+             # 1 or more horizontal spaces

屏幕截图(之前):

enter image description here

屏幕截图(之后):

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?