正则表达式将选择具有多个标点符号的所有行?

时间:2014-11-06 23:01:43

标签: regex notepad++

我有这个正则表达式:

\..*?\.

但它只在两个时段之间进行选择,而不是每个标点符号,并且它还可以选择多行 如果还有一种方法可以将标点符号分组到我们有句号的位置,那么将此表达式修改为一次只能在一行中使用一行吗? 只是为了使事情更简单,此时我只需要表达式来识别句点,感叹号和问号。我不需要它来注册逗号。

感谢下面的Nathan和Agumander,我知道用[。!?]代替\。现在,但是我的另一半问题仍然存在问题 只是为了确保我更清楚,使用[。!?]。*?[。!?] \ s将突出显示标点符号之间的文字,但跨多行。所以我不能用它来仅标记有多个标点符号的行。

3 个答案:

答案 0 :(得分:2)

将字符放在一对方括号内将与任何包含的字符匹配。在您的情况下,您需要[.?!]

如果你想匹配任何包含其中两个句子的句子,那么你将要找到一对[.!?],其中任何一个字符都是零或更多。

匹配具有多个[.?!]集的字符串的正则表达式将为[.!?].*[.!?]

要使.匹配换行符,您需要将s修饰符添加到正则表达式中。

...所以完整的正则表达式将是/[.!?].*[.!?]/s

答案 1 :(得分:0)

好的我明白了。感谢上面的Agumander和Nathan,我用[。!?]取代了两个\。在我原来的正则表达式中:

\ .. *?\。变成[。!?]。* [。!?]

将\ s放在正则表达式的末尾,使其变为粉红色,在记事本++中选择整个文档 我的最后一个问题是记得要关闭“匹配换行符。”

答案 2 :(得分:0)

Agumander,我认为你要求一个正则表达式,基本上在一行上找到多个标点符号。所以这是一种方法。

这是我要匹配的文字。正则表达式将匹配其中的第一行,但与第二行不匹配。

Here's a line with multiple punctuation. The entire line will match the regex!
This line does not have multiple punctuation.

<强>正则表达式

^.*(?:[\.?!].*){2,}$

<强>解释

^            -- Start matching at the beginning of a line
.*           -- match any character 0 or more times
(?:          -- start a new non-capturing group
   [.?!]     -- find a character matching a period, question mark, or exclamation point.
   .*        -- match any character 0 or more times
 )           
 {2,}        -- repeat the previous group 2 or more times. This is how we ensure there's at least two punctuation marks before considering it a match.
 $           -- end of line anchor, basically stop matching at the end of a line