仅使用正则表达式查找字符串中的中间字符
本文关键字:中间 字符 字符串 查找 正则表达式 | 更新日期: 2023-09-27 18:20:00
如何使用仅正则表达式的找到中间字符
例如,这显示了预期输出
Hello
->l
world
->r
merged
->rg
(出现的偶数参见此)
hi
->hi
I
->I
我试过
(?<='w+).(?='w+)
正则表达式不能以您所寻找的方式计数。这看起来像是正则表达式无法实现的。我建议编写代码来解决这个问题。
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));
这可能会奏效。
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);
}
相关:如何将字符串中的中间字符与正则表达式匹配
下面的regex基于@jaytea的方法,可以很好地与例如PCRE、Java或C#配合使用。
^(?:.(?=.+?(.'1?$)))*?(^..?$|..?(?='1$))
这是regex101的演示和RegexPlanet的.NET演示(单击绿色的".NET"按钮)
中间字符将在第二个捕获组中找到。目标是捕获两个中间字符,如果有偶数个字符,则捕获一个。它的工作方式是:向末尾(第一组)增长捕获,同时缓慢地遍历字符串,直到捕获的子字符串随着每次重复而增长。^..?$
用于匹配长度为一个或两个字符的字符串。
这个";"成长";通过将对同一组的可选引用与新捕获的角色一起放入该组,在重复前瞻中捕获。
一种具有'K
重置且完全匹配的PCRE变体:^(?:.(?=.+?(.'1?$)))+?'K..?(?='1$)|^..?
对";使用平衡组的简单解决方案";@Qtax在他的问题中提到的。