你能帮我为下面的字符串写一个正则表达式吗?
Hi $(abc) frnd $(xyz)
在此文本中,我想匹配所有未被 . 包围的单词$( )
。所以,在上面的字符串中,我想匹配Hi
并且frnd
我试过了,\$((.[^)]*.))
但它匹配 $(abc) 和 $(xyz)。但我想匹配符号之外的那些
你可以在 Java 中使用否定的lookbehind吗?这似乎在 C# 中有效(但你永远不能用正则表达式告诉 100%!)
(?<!\$\([A-Za-z]*)[A-Za-z]+(?!\))
您可以将字符串拆分为不包含 的部分,也$(...)
可以使用replaceAll
函数删除$(...)
.
// Raw regex: \$\([^)]+\)
str.split("\\$\\([^)]+\\)");
str.replaceAll("\\$\\([^)]+\\)", "")
然后你可以提取所有你想要的文本。正则表达式假定$(...)
不允许)
指定中间的文本。在这种情况下$(abc$(crap)_outside
,仅_outside
会在更换后留下。
可以编写一个正则表达式来挑选单词并忽略$(...)
, 通过使用 last match boundary \G
,但这样做更简单:$(...)
在匹配文本之前删除部分。
试试下面的代码它将打印所需的输出。
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());
}
}