regex 仅使用正则表达式查找字符串中的中间字符

7eumitmz  于 2022-12-14  发布在  其他
关注(0)|答案(4)|浏览(435)

我怎样才能找到中间字符与正则表达式只
例如,下面显示了预期输出
Hello -〉l
world -〉r
merged-〉rg(出现偶数的情况请参见此部分)
hi -〉hi
I -〉I
我试过了

(?<=\w+).(?=\w+)
5sxhfpxr

5sxhfpxr1#

正则表达式无法以您正在寻找的方式计数。这看起来像是正则表达式无法完成的事情。我建议编写代码来解决这个问题。

ih99xse1

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));

这应该可以。

wgx48brx

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);
    }
00jrzges

00jrzges4#

下面的正则表达式是基于@jaytea的方法,可以很好地与PCRE、Java或C#一起工作。

^(?:.(?=.+?(.\1?$)))*?(^..?$|..?(?=\1$))

Here is the demo at regex101a .NET demo at RegexPlanet(单击绿色的.NET按钮)
中间字符(s)将在 secondcapturing group中找到。目标是在字符数为偶数时捕获中间的两个字符,另外一个。它的工作原理是在接近尾声时 * 增长捕获 第一组 *),同时lazily遍历字符串,直到它以捕获的子字符串结束,该子字符串随着每次重复而增长。^..?$用于匹配一个或两个字符长度的字符串。
这种“增长”与repeatedlookahead内的 * 捕获 * 一起工作,方法是将optionalreference与新捕获的角色一起放入 * 同一组 *(further reading here)。
要重置的具有\K和 * 完全匹配 * 的PCRE变量:^(?:.(?=.+?(.\1?$)))+?\K..?(?=\1$)|^..?显示器
对@Qtax在他的问题中提到的“使用 * 平衡组 * 的简单解决方案”感到好奇。

相关问题