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

本文关键字:中间 字符 字符串 查找 正则表达式 | 更新日期: 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在他的问题中提到的。