我有几行短语,例如
The quick brown fox jumps over the lazy dog
quick brown fox jumps over the lazy dog
brown fox jumps over the lazy dog
现在我想在每个第一个单词之后选择每一行的其余部分。即我想标记从一行中第一个单词的结尾开始的所有内容。我的尝试是:
^(?:\w+).*
我在记事本++中使用它。为什么这会选择整行?我究竟做错了什么?
感谢您提高我的正则表达式知识!
^\S+\h+(.+)$
$1
. matches newline
解释:
给定示例的结果:
屏幕截图:
这是您的正则表达式的解释:
因此,它匹配一个单词以及该单词之后的所有内容。非捕获组在这里没用。非捕获组并不意味着不会匹配,而只是不会被捕获。它严格等同于:
^\w+.*
您可以使用零宽度正向向后看
\K
,例如:将
\w+
匹配行首的第一个单词(The
或quick
),后面的空格字符将匹配[^\w]+
(一个或多个非单词字符)。并\K.*
匹配之后的所有内容,不包括\K
匹配之前的任何内容。它在 perl 文档中有所描述:https ://perldoc.perl.org/perlre.html#Lookaround-Assertions
您的正则表达式不起作用,因为您匹配的是行首,后跟一个或多个单词字符(无论您是否在
(?:…)
此处使用非捕获组),然后是任何字符。问题是,行首的单词字符^(?:\w+)
(与 相同^\w+
)是匹配的一部分。