我有一个文本文件,表示单个'
的备注。
有些行有两个引号,但我需要从'
的第一个实例和换行符中获取所有内容。
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
答案 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:”
的行中查找文本(。*?)这是第二个捕获的文本,表示之后的所有内容
(?= | $)创建一个限制,该限制是=和|
之间的空格因此,对于第二组,您将拥有值