正则表达式中的java标点符号
我是一个Java初学者,给了我一个这样的句子
"Se excluye arbitraje de ley y [rotura de lunas]Gar_1.
Se excluye arbitraje de ley y [rotura de lunas]noGar"
我想确认一下
"[rotura de lunas]Gar_1" and "[rotura de lunas]noGar".
因此,我编写了以下正则表达式:
"(.\*)Gar_1 (.\*) \\1noGar".
只要附加到"Gar_1"
的字符串和附加到"noGar"
的字符串之间没有标点符号,这就行了。但是只要我有一个句号(.
),就像我在开头写的句子一样,那么就找不到匹配项。我已经尝试在我的正则表达式中添加"(\\pP)*"
之类的内容,尝试在我想要识别的两个字符串之间添加标点符号,但这也不起作用
有人能帮我吗
# 1 楼答案
此正则表达式捕获要添加到组1和组3的字符串:
在demo中,查看右窗格中的组1和组3
要检查它们:
(?s)
启用DOTALL
模式,允许点跨行匹配((\[[^\]]*\])Gar_1)
将[rotura de lunas]Gar_1
捕获到组1。里面,(\[[^\]]*\])
匹配[rotura de lunas]
并将其捕获到组2.*?
懒洋洋地吃掉字符,直到我们能够匹配李>\2noGar
,即第2组,后跟noGar
,即[rotura de lunas]noGar
简单更换
您可以在感兴趣的组周围添加捕获括号,以帮助您构建替换字符串。例如,它将
Gar1
替换为noGar
请参阅online demo底部的输出
# 2 楼答案
这应该适合您:
\[.+?\]\w+
它将不贪婪地匹配
[]
之间的所有内容,\w
表示任何单词字符,因此将匹配要捕获的字符串的最后一部分# 3 楼答案
我不知道我是否真的理解了这个问题,你应该提供更多的信息,但是如果你想确定在noGar和Garu 1之前是什么,你可以使用前瞻
它应该给你2根火柴
[月神之轮]
# 4 楼答案
您的语法似乎在
(.\*)
处出错。是Java吗? 我会尝试使用贪婪的量词:"(.*?)Gar_1 (.*?) \\1noGar"
更多信息请访问http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
# 5 楼答案
问题源于换行符与
.*
不匹配。要更改.
的此默认行为,必须使用可以使用(?s)
设置的单线模式。例如: