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

时间:2009-05-06 17:52:49

标签: regex

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

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

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

7 个答案:

答案 0 :(得分:126)

'.*

我相信您需要选项Multiline。

答案 1 :(得分:76)

适当的正则表达式是'char跟随任意数量的任何字符[包括零字符],以字符串/行标记的结尾结束:

'.*$

如果你想在之后捕获所有但不包含在输出中,你可以使用:

(?<=').*$

这基本上就是说给我所有跟随'char直到行尾的字符。

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

'.* 

技术上是正确的,但是具体更清楚,避免混淆以后的代码维护,因此我使用$。我认为,在可以质疑清晰度的情况下,宣布明确的行为总是比依赖隐性行为更好。

答案 2 :(得分:19)

'.*$

从单引号(')开始,将任何字符(.)匹配零次或多次(*),直到该行结束($

答案 3 :(得分:8)

当我在Windows(Notepad ++)中尝试&#39;。*它会在第一个&#39;之后匹配所有内容。直到最后一行结束。

要捕获所有内容直到该行结束,我输入以下内容:

'.*?\n

这只能捕捉来自&#39;直到该行结束。

答案 4 :(得分:4)

在您的示例中,我采用以下模式:

'([^\n]+)$

使用多行和全局选项来匹配所有出现。

要在您可以使用的匹配项中包含换行符:

'[^\n]+\n

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

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

'[^$]+$

答案 5 :(得分:2)

这将捕获所有内容,直到'后向引用1 - 以及后面引用中的所有内容2.您可能需要转义撇号,但取决于语言(\')

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

快速修改:如果该行没有' - 反向引用1仍然应该抓住整行。

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

答案 6 :(得分:0)

https://regex101.com/r/Jjc2xR/1

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

我确定这是可行的,它将捕获结构不良的文本多行波纹管中的de hexa系列

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

我是regex的永恒新手,但我会尽力解释这一点

(\ w *(Hex):w *):在字符串包含“ Hex:”

的行中查找文本

(。*?)这是第二个捕获的文本,表示之后的所有内容

(?= | $)创建一个限制,该限制是=和|

之间的空格

因此,对于第二组,您将拥有值