我怎样才能找到中间字符与正则表达式只例如,下面显示了预期输出Hello -〉lworld -〉rmerged-〉rg(出现偶数的情况请参见此部分)hi -〉hiI -〉I我试过了
Hello
l
world
r
merged
rg
hi
I
(?<=\w+).(?=\w+)
5sxhfpxr1#
正则表达式无法以您正在寻找的方式计数。这看起来像是正则表达式无法完成的事情。我建议编写代码来解决这个问题。
ih99xse12#
String str="Hello"; String mid=""; int len = str.length(); if(len%2==1) mid= Character.toString(str.getCharAt(len/2)); else mid= Character.toString(str.getChatAt(len/2))+ Character.toStringstr.getCharAt((len/2)-1));
这应该可以。
wgx48brx3#
public static void main(String[] args) { String s = "jogijogi"; int size = s.length() / 2; String temp = ""; if (s.length() % 2 == 0) { temp = s.substring(size - 1, (s.length() - size) + 1); } else if (s.length() % 2 != 0) { temp = s.substring(size, (s.length() - size)); } else { temp = s.substring(1); } System.out.println(temp); }
00jrzges4#
下面的正则表达式是基于@jaytea的方法,可以很好地与PCRE、Java或C#一起工作。
^(?:.(?=.+?(.\1?$)))*?(^..?$|..?(?=\1$))
Here is the demo at regex101和a .NET demo at RegexPlanet(单击绿色的.NET按钮)中间字符(s)将在 secondcapturing group中找到。目标是在字符数为偶数时捕获中间的两个字符,另外一个。它的工作原理是在接近尾声时 * 增长捕获 ( 第一组 *),同时lazily遍历字符串,直到它以捕获的子字符串结束,该子字符串随着每次重复而增长。^..?$用于匹配一个或两个字符长度的字符串。这种“增长”与repeatedlookahead内的 * 捕获 * 一起工作,方法是将optionalreference与新捕获的角色一起放入 * 同一组 *(further reading here)。要重置的具有\K和 * 完全匹配 * 的PCRE变量:^(?:.(?=.+?(.\1?$)))+?\K..?(?=\1$)|^..?显示器对@Qtax在他的问题中提到的“使用 * 平衡组 * 的简单解决方案”感到好奇。
^..?$
\K
^(?:.(?=.+?(.\1?$)))+?\K..?(?=\1$)|^..?
4条答案
按热度按时间5sxhfpxr1#
正则表达式无法以您正在寻找的方式计数。这看起来像是正则表达式无法完成的事情。我建议编写代码来解决这个问题。
ih99xse12#
这应该可以。
wgx48brx3#
00jrzges4#
下面的正则表达式是基于@jaytea的方法,可以很好地与PCRE、Java或C#一起工作。
Here is the demo at regex101和a .NET demo at RegexPlanet(单击绿色的.NET按钮)
中间字符(s)将在 secondcapturing group中找到。目标是在字符数为偶数时捕获中间的两个字符,另外一个。它的工作原理是在接近尾声时 * 增长捕获 ( 第一组 *),同时lazily遍历字符串,直到它以捕获的子字符串结束,该子字符串随着每次重复而增长。
^..?$
用于匹配一个或两个字符长度的字符串。这种“增长”与repeatedlookahead内的 * 捕获 * 一起工作,方法是将optionalreference与新捕获的角色一起放入 * 同一组 *(further reading here)。
要重置的具有
\K
和 * 完全匹配 * 的PCRE变量:^(?:.(?=.+?(.\1?$)))+?\K..?(?=\1$)|^..?
显示器对@Qtax在他的问题中提到的“使用 * 平衡组 * 的简单解决方案”感到好奇。