你可以帮我写一下下面字符串的正则表达式,
Hi $(abc) frnd $(xyz)
在本文中,我想匹配未被$( )
包围的所有字词。因此,在上面的字符串中,我想匹配Hi
和frnd
我尝试使用\$((.[^)]*.))
,但它匹配$(abc)和$(xyz)。但我想匹配符号之外的那些
答案 0 :(得分:1)
你能在Java中使用负面的lookbehind吗?这似乎适用于C#(但你永远无法告诉100%的正则表达式!)
(?<!\$\([A-Za-z]*)[A-Za-z]+(?!\))
答案 1 :(得分:1)
您可以将字符串拆分为不包含$(...)
的部分,也可以使用replaceAll
函数删除$(...)
。
// Raw regex: \$\([^)]+\)
str.split("\\$\\([^)]+\\)");
str.replaceAll("\\$\\([^)]+\\)", "")
然后您可以提取所需的文本。正则表达式假定$(...)
之间的文本不允许指定)
。在$(abc$(crap)_outside
之类的情况下,替换后只会留下_outside
。
通过使用最后一个匹配边界$(...)
,可以编写单个正则表达式来挑选单词并忽略\G
,但是如上所述更简单:删除{{1在匹配文本之前的部分。
答案 2 :(得分: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());
}
}