什么正则表达式可以捕捉从标记到行尾的所有内容?

我有一个文本文件,表示与一个单一的 '备注。

有些行有两个引号,但是我需要从 '的第一个实例和换行符中获取所有内容。

I AL01                  ' A-LINE                            '091398 GDK 33394178
402922 0831850 '                                   '091398 GDK 33394179
I AL02                  ' A-LINE                            '091398 GDK 33394180
400722 0833118 '                                   '091398 GDK 33394181
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182
395335 0832203 '                                  '  53198 DJ  33394183
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418
278492 次浏览

适当的正则表达式应该是’char 后跟任意数量的以 string/line 标记结尾的任意字符(包括零个 char) :

'.*$

如果你想捕获所有的 之后字符,但不包括在输出中,你会使用:

(?<=').*$

这基本上是说,给我所有的字符后面的’字符,直到行的结束。

编辑 : 已经注意到 $在使用. * 时是隐式的,因此不是严格要求的,因此模式:

'.*

在技术上是正确的,但是它更加明确,以避免后续代码维护的混淆,因此我使用 $。我认为,在明确性可能受到质疑的情况下,宣布明确的行为总比依赖于隐含的行为要好。

'.*$

从单引号(')开始,匹配任何字符(.)0次或更多次(*) ,直到行尾($)。

'.*

我相信你需要选择,多线。

这将捕获到后向引用1中的所有内容,以及后向引用2中的所有内容。您可能需要避免使用撇号,但这取决于语言(’)

/^([^']*)'?(.*)$/

快速修改: 如果行没有’-backreference,1应该仍然捕获整个行。

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string

当我在 windows (Notepad + +)中尝试’. * 时,它会匹配第一行之后的所有内容,直到最后一行结束。

为了捕捉到这一行的结尾,我输入了以下内容:

'.*?\n

这只能捕捉到从“直到该行结束的所有内容。

在你的例子中,我会采用以下模式:

'([^\n]+)$

使用多行和全局选项来匹配所有事件。

要在匹配中包含 linefeed,您可以使用:

'[^\n]+\n

但是如果没有换行符,这可能会错过最后一行。

对于单行,如果您不需要匹配我更喜欢使用的 linefeed:

'[^$]+$

Https://regex101.com/r/jjc2xr/1

/(\w*\(Hex\): w*)(.*?)(?= |$)/gm

我敢肯定这一个工程,它将捕获的结构不良的文本多行波纹管六序列

     Space Reservation: disabled
Serial Number: wCVt1]IlvQWv
Serial Number (Hex): 77435674315d496c76515776
Comment: new comment

我永远都是正则表达式的新手,但我会试着解释这一点

(w * (十六进制) : w *) : 在字符串包含“十六进制:”的行中查找文本

(. * ?)这是第二个捕获的文本,意味着之后的一切

(? = | $)创建一个限制,即 = 和 | 之间的空格

因此,对于第二组,您将得到