我在Java的一次采访中被问到这个问题。我不能解决它,但我猜它可以解决使用正则表达式。不确定是否有一种不使用正则表达式的替代方法。有人能帮我用正则表达式吗?或者,如果不使用正则表达式就能解决这个问题。
给定一个平衡括号字符串(它只包含[
或]
,并且它已经平衡),我需要查找它内部是否包含模式[*][*][*]
(*
表示一个或多个平衡括号表达式)。也就是说,检查它是否在任何[]
中包含3个或更多的[]
。
示例:
对于[[][[][][]]]
,预期答案为true,因为其内部包含[][][]
。
对于[[]][[]]
预期答案为false,因为它的连续[]
少于3个
对于[[]][][[]]]
,预期答案为true,因为其内部包含[..][][..]
。如果[]
内部有0个或更多的[]
则无关紧要。
正则表达式不是解决这类问题的方法。由于递归,它们不能特别好地处理嵌套结构。
例如,对于使用堆栈(FILO)来说,这是一个完美的问题。我建议你看看那些。
class Node
{
private final Node parent;
private final List<Node> subNodes = new LinkedList<>();
Node(Node parent)
{
this.parent = parent;
}
static Node buildFrom(String str)
{
Node start = new Node(null);
Node current = start;
for (char ch : str.toCharArray())
{
if (ch == '[') //Create new subnode
{
Node newNode = new Node(current);
current.subNodes.add(newNode);
current = newNode;
}
else //Step back
{
current = current.parent;
}
}
return start;
}
boolean hasTripleNodes()
{
if (this.subNodes.size() >= 3) //Found triple+ nodes
{
return true;
}
else //Continue recursion
{
for (Node subNode: this.subNodes)
{
if (subNode.hasTripleNodes())
{
return true;
}
}
return false;
}
}
//DEMO
public static void main(String[] args) throws Exception {
Node nodes = Node.buildFrom("[[][[][][]]]");
System.out.println(nodes.hasTripleNodes()); //writes true
nodes = Node.buildFrom("[[]][[][]]");
System.out.println(nodes.hasTripleNodes()); //writes false
nodes = Node.buildFrom("[[[]][][[]]]");
System.out.println(nodes.hasTripleNodes()); //writes true
}
}
我需要编写正则表达式,以特殊符号捕获类型name的泛型参数(也可以是泛型的),如下所示: 假设类型名是,参数是,所以我只需要抓取,和 基本上,如果平衡组堆栈是空的,我需要采取一些措施,但我真的不明白怎么做。 UPD 下面的答案帮助我快速解决了这个问题(但没有适当的验证,深度限制=1),但我通过团队平衡成功地解决了这个问题: 演示 UPD2(上次优化)
问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-
我需要一种使用RegEx搜索文本并在Latex命令中找到一个单词的方法(这意味着它在花括号内) 这是一个例子: 现在如果你搜索正则表达式:,并将其替换为< code>$1T~a~r~z~a~n$3 这将只替换花括号中的泰山这个词,而忽略另一个实例!这是我来的最远的地方。 现在我需要的是对下面的例子做同样的事情: 在这个例子中,我只需要最后提到的“泰山”被替换(\grk{}中的那个) 有人可以帮助我
我需要通过不在括号中的管道拆分文本。这是示例文本 我在这里找到了这个/\ |(?![^{]*})/g:regex,提取字符串,不要在两个括号之间 现在当我想用管子分割这部分字符串时 它还选择杰森、玛丽亚和圣诞老人之间的管道,因为它们后面有一个开口支架。如果正则表达式不在任何括号中,如何将其更改为仅匹配管道。 测试字符串: 应该返回 . 应该返回
问题内容: 我一直试图在Java中编写一个正则表达式以删除下面括号中的所有内容,同时保留其他所有内容。 注意,括号可以嵌套,这就是为什么我的模式失败的原因 。有人能帮我吗?下面我试过了: 但这打印: d4 Nf6 2. c4 g6 3. Nc3 Bg7 4. e4 d6 5. Nf3 OO 6. Be2 e5 7. dxe5 dxe5 8. Qxd8 Rxd8 9. Bg5 Nbd7 10. OO
我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)