-2

你能帮我为下面的字符串写一个正则表达式吗?

Hi $(abc) frnd $(xyz)

在此文本中,我想匹配所有未被 . 包围的单词$( )。所以,在上面的字符串中,我想匹配Hi并且frnd

我试过了,\$((.[^)]*.))但它匹配 $(abc) 和 $(xyz)。但我想匹配符号之外的那些

4

3 回答 3

1

你可以在 Java 中使用否定的lookbehind吗?这似乎在 C# 中有效(但你永远不能用正则表达式告诉 100%!)

(?<!\$\([A-Za-z]*)[A-Za-z]+(?!\))
于 2013-01-03T12:21:13.767 回答
1

您可以将字符串拆分为不包含 的部分,也$(...)可以使用replaceAll函数删除$(...).

// Raw regex: \$\([^)]+\)

str.split("\\$\\([^)]+\\)");

str.replaceAll("\\$\\([^)]+\\)", "")

然后你可以提取所有你想要的文本。正则表达式假定$(...)不允许)指定中间的文本。在这种情况下$(abc$(crap)_outside,仅_outside会在更换后留下。

可以编写一个正则表达式来挑选单词并忽略$(...), 通过使用 last match boundary \G,但这样做更简单:$(...)在匹配文本之前删除部分。

于 2013-01-03T12:33:28.913 回答
0

试试下面的代码它将打印所需的输出。

public static void main(String[] args)
{
    String text = "Hi $(abc) frnd $(xyz)";
    String[] textArr = text.split("\\$\\([^)]*\\)");

    for (String word : textArr)
    {
        System.out.println(word.trim());

    }

}
于 2013-01-03T12:32:11.793 回答