我有这个正则表达式:
\..*?\.
但它只在两个时段之间进行选择,而不是每个标点符号,并且它还可以选择多行 如果还有一种方法可以将标点符号分组到我们有句号的位置,那么将此表达式修改为一次只能在一行中使用一行吗? 只是为了使事情更简单,此时我只需要表达式来识别句点,感叹号和问号。我不需要它来注册逗号。
感谢下面的Nathan和Agumander,我知道用[。!?]代替\。现在,但是我的另一半问题仍然存在问题 只是为了确保我更清楚,使用[。!?]。*?[。!?] \ s将突出显示标点符号之间的文字,但跨多行。所以我不能用它来仅标记有多个标点符号的行。
答案 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