Pav*_*dka 5 java regex android
我正在尝试为我的问题创建一个正确的正则表达式,并且显然遇到了奇怪的问题.
让我来描述一下我要做的事情......
我的目标是从字符串的两端删除逗号.E,g,字符串, ,, ,,, , , Hello, my lovely, world, ,, ,
应该变得公正Hello, my lovely, world
.
我准备了以下正则表达式来完成这个:
(\w+,*? *?)+(?=(,?\W+$))
它就像正则表达式验证器中的魅力一样,但是当我试图在Android设备上运行它时,matcher.find()
函数会挂起〜1分钟以找到正确的匹配...我认为,问题在于我正在使用的正面预测,但是我找不到更好的解决方案,而不仅仅是从开头和结尾分别修剪逗号:
output = input.replaceAll("^(,?\\W?)+", ""); //replace commas at the beginning
output = output.replaceAll("(,?\\W?)+$", ""); //replace commas at the end
Run Code Online (Sandbox Code Playgroud)
在Java正则表达式中,我是否缺少积极前瞻的东西?如何在开头和结尾之间检索逗号之间的字符串部分?
如果使用匹配的组,则不必使用前瞻.试试正则表达式^[\s,]*(.+?)[\s,]*$
:
编辑:要将它拆分,^
匹配行的开头,如果使用这在技术上是多余的,matches()
但在其他地方可能有用.[\s,]*
匹配零个或多个空白字符或逗号,但贪婪 - 它将接受尽可能多的字符.(.+?)
匹配任何字符串,但尾随问号指示它匹配尽可能少的字符(非贪婪),并且还将内容捕获到"组1",因为它形成第一组括号.非贪婪匹配允许最终组包含相同的零或多个逗号或空格([\s,]*
).就像^
,最终$
匹配线的末尾 - 有用find()
但多余matches()
.
如果您只需要匹配空格,请替换[\s,]
为[ ,]
.
这应该工作:
Pattern pattern = Pattern.compile("^[\\s,]*(.+?)[\\s,]*$");
Matcher matcher = pattern.matcher(", ,, ,,, , , Hello, my lovely, world, ,, ,");
if (!matcher.matches())
return null;
return matcher.group(1); // "Hello, my lovely, world"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
348 次 |
最近记录: |