当前位置: 首页 > 知识库问答 >
问题:

使用多个字符串分隔符拆分字符串

孟智志
2023-03-14

如何将过滤器列表拆分为单个过滤器元件?split2String在线程“main”java.util.regex中导致:异常。PatternSyntaxException:索引10或(|和)附近的未闭合组(

public class TestIt {

    public static void main(String[] args) {
        // condition is Part of the Thunderbird Filter List
        String condition1 = "OR (subject,contains,Xxxx Yyyy) OR (subject,contains,Uuuu Cccc) AND (from,contains,Wwwww Zzzzz) OR (subject,contains,Uuuu Cccc)";
        String condition2 = "OR (subject,contains,Xxxx YyOR yy) OR (subject,contains,Uuuu CcAND cc) AND (from,contains,Wwwww Zzzzz) OR (subject,contains,Uuuu Cccc)";
        split1String(condition1);
        split1String(condition2);
        split2String(condition1);
        split2String(condition2);
        /*
         * Expected Result with condition2:
         * (subject,contains,Xxxx YyOR yy)
         * (subject,contains,Uuuu CcAND cc)
         * (from,contains,Wwwww Zzzzz)
         * (subject,contains,Uuuu Cccc)
         * 
         */
    }

    public static void split1String(String condition) {
        // Syntax=OK Result wrong
        String[] xsplitted = condition.split("OR |AND ");
        for (int i = 0; i < xsplitted.length; i++) {
            System.out.println(xsplitted[i]);
        }
    }

    public static void split2String(String condition) {
        // Syntax=NOT OK 
        String[] xsplitted = condition.split("OR (|AND (");
        for (int i = 0; i < xsplitted.length; i++) {
            System.out.println(xsplitted[i]);
        }
    }

共有2个答案

白弘伟
2023-03-14

您可以使用以下正则表达式来提取信息。因为所有你需要的都包含在括号里。

Pattern pattern = Pattern.compile("\\((.*?)\\)", Pattern.MULTILINE);

Matcher matcher = pattern.matcher(condition2);

while (matcher.find()) {
  for (int i = 1; i <= matcher.groupCount(); i++) {
    System.out.println(matcher.group(i));
  }
}
姜磊
2023-03-14

"OR(|AND("这个正则表达式语法不正确。圆括号字符在正则表达式中有特殊含义。它标志着捕获组的乞求。由于它是一个特殊字符,因此必须通过添加\\来转义:

"OR (subject,contains,Xxxx Yyyy) OR (subject,contains,Uuuu Cccc) AND (from,contains,Wwwww Zzzzz) OR (subject,contains,Uuuu Cccc)".split("OR \\(|AND \\(")

这给出了:

 String[5] { "", "subject,contains,Xxxx Yyyy) ", "subject,contains,Uuuu Cccc) ", "from,contains,Wwwww Zzzzz) ", "subject,contains,Uuuu Cccc)" }

因此,正确的正则表达式如下:<code>“或\(|和\(“)

 类似资料:
  • 问题内容: 我有一个值为的字符串。我想将字符串分成两个字符串,值为的字符串和的值为字符串。 正确的功能/语法是什么? 我已经看过了,但是找不到将数据返回到两个单独的字符串中的实际语法。 问题答案: 该功能适用于:

  • 我是 Perl 的新手,但根据我阅读的文档,看起来 Perl 中的 split 函数要求正则表达式模式而不是字符串分隔符作为第一个参数,但我发现使用 之类的东西仍然可以正确拆分字符串。 基于此,我尝试使用可变分隔符(例如。< code>print (split($var,$ string))[0] where < code > $ var = ' ' )并发现它不起作用。我做错了什么? 谢谢! 编

  • 问题内容: 如何在JavaScript中使用多个分隔符拆分字符串?我正在尝试在逗号和空格上进行拆分,但是AFAIK,JS的拆分功能仅支持一个分隔符。 问题答案: 传递正则表达式作为参数: 编辑添加: 您可以通过选择数组的长度减去1来获得最后一个元素: …,如果模式不匹配:

  • 为什么下面的bash代码不起作用? 预期产出:

  • 我有一个输入字符串,其中包含由分隔符(| |)分隔的4个ID。我使用的代码如下: 但有些情况下并非所有ID都存在,如: 在上面的场景中,拆分不会分为4个部分,并且无法判断拆分数组中缺少哪个id。 有人可以帮助一个有效的解决方案。

  • 问题内容: 我在网上找到了一些答案,但是我没有使用正则表达式的经验,我相信这里是需要的。 我有一个字符串,需要用分隔 或也就是说,它必须是分号或逗号后跟一个空格。没有尾随空格的单个逗号应保持不变 示例字符串: 应该拆分为包含以下内容的列表: 问题答案: 幸运的是,Python内置了:) 更新: 在你的评论之后: