我有一个文本文件,表示单个备注'.
有些行有两个引号,但我需要从a的第一个实例'和换行符中获取所有内容.
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
Run Code Online (Sandbox Code Playgroud)
Jos*_*den 141
'.*
Run Code Online (Sandbox Code Playgroud)
我相信你需要选项,Multiline.
Ben*_*ter 81
适当的正则表达式是'char后跟任意数量的任何字符[包括零字符],以字符串/行标记的结尾结束:
'.*$
Run Code Online (Sandbox Code Playgroud)
如果你想在'char但是不包含在输出中之后捕获所有内容,你会使用:
(?<=').*$
Run Code Online (Sandbox Code Playgroud)
这基本上说给我所有跟随'char直到行尾的字符.
编辑:已经注意到$在使用.*时是隐式的,因此不是严格要求的,因此模式:
'.*
Run Code Online (Sandbox Code Playgroud)
在技术上是正确的,但更具体,更容易混淆以后的代码维护,因此我使用$.我认为,在可以质疑清晰度的情况下,宣布明确的行为总是比依赖隐性行为更好.
小智 9
当我在Windows(Notepad ++)中尝试'.*时,它会匹配所有内容后的第一个'直到最后一行的结尾.
要捕获所有内容,直到该行结束,我输入以下内容:
'.*?\n
Run Code Online (Sandbox Code Playgroud)
这只能捕获从该行到该行的所有内容.
这将捕获反向引用 1 中的 ' 之前的所有内容 - 以及反向引用 2 中 ' 之后的所有内容。尽管取决于语言 (\'),您可能需要转义撇号
/^([^']*)'?(.*)$/
Run Code Online (Sandbox Code Playgroud)
快速修改:如果该行没有 ' - 反向引用 1 仍应捕获整行。
^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string
Run Code Online (Sandbox Code Playgroud)
在您的示例中,我将采用以下模式:
'([^\n]+)$
Run Code Online (Sandbox Code Playgroud)
使用多行和全局选项来匹配所有事件。
要将换行符包含在匹配中,您可以使用:
'[^\n]+\n
Run Code Online (Sandbox Code Playgroud)
但是,如果没有换行符,则可能会错过最后一行。
对于单行,如果不需要匹配换行符,我更愿意使用:
'[^$]+$
Run Code Online (Sandbox Code Playgroud)