Regex 什么样的正则表达式可以捕获';标记到一行的末尾?
我有一个文本文件,用一个Regex 什么样的正则表达式可以捕获';标记到一行的末尾?,regex,Regex,我有一个文本文件,用一个“来表示备注 有些行有两个引号,但我需要从“的第一个实例和换行符中获取所有内容 I AL01 ' A-LINE '091398 GDK 33394178 402922 0831850 ' '091398 GDK 33394179 I AL02 ' 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
适当的正则表达式应该是“char”,后跟任意数量的以字符串/行结束标记结尾的任何字符[包括零字符]:
'.*$
如果您想捕获“char”之后的所有内容,但不想将其包含在输出中,您可以使用:
(?<=').*$
在技术上是正确的,但更清楚的是要具体,避免以后的代码维护混淆,所以我使用$。我认为,在清晰性可能受到质疑的情况下,宣布明确的行为总比依靠隐含的行为好
'.*$
从单引号(”
)开始,匹配任何字符(
)零次或多次(*
),直到行尾($
)
我相信您需要多行选项。这将捕获到“in backreference 1”之前的所有内容,以及“in backreference 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]+)$
使用多行和全局选项匹配所有事件
要在匹配中包含换行符,可以使用:
'[^\n]+\n
但如果没有换行符,则可能会错过最后一行
对于单行,如果不需要匹配换行符,我更喜欢使用:
'[^$]+$
我相信这一个工程,它将捕获德六边形序列在结构不良的文本多行贝娄
Space Reservation: disabled
Serial Number: wCVt1]IlvQWv
Serial Number (Hex): 77435674315d496c76515776
Comment: new comment
我对正则表达式是个十足的新手,但我会尽力解释这一点
(\w*(十六进制):w*):在字符串包含“十六进制”的行中查找文本:
(*)这是第二个捕获的文本,意味着之后的所有内容
(?=|$)创建一个限制,即=和|
因此,对于第二组,您将获得值美元是不必要的。在正常情况下,圆点会停在线的末端。不必要,但适合他想做的事情。它后来提醒人们,它期待着从“到世界末日”的一切line@balabaster:我没有说那是错的这只是一个脚注。@Tomalak:我并不是想暗示你错了,只是想澄清我选择使用美元而不是不使用美元的原因。感谢您指出这一点。+1包括如何在所讨论的角色之后包含所有内容,而不是始终包含它。这将捕获角色的第一个实例和最后一行的结尾。这个答案是如何分解命令背后的逻辑的一个很好的示例,非常清晰!这不是问题,是吗?
'[^\n]+\n
'[^$]+$
/(\w*\(Hex\): w*)(.*?)(?= |$)/gm
Space Reservation: disabled
Serial Number: wCVt1]IlvQWv
Serial Number (Hex): 77435674315d496c76515776
Comment: new comment