小编use*_*001的帖子

Java正则表达式用括号括起来

我有以下输入字符串:

flag1 == 'hello' and flag2=='hello2'
Run Code Online (Sandbox Code Playgroud)

(字符串长度和=='某事'变化).

期望的输出:

flag1==("hello") and flag2=("hello2")
Run Code Online (Sandbox Code Playgroud)

我试过了

line = line.replaceAll("(\\s*==\\s*)", "(\"") 
Run Code Online (Sandbox Code Playgroud)

但这并没有给我一个结束.知道如何做到这一点?

谢谢!

java regex

6
推荐指数
1
解决办法
789
查看次数

Java 中长字符串的正则表达式模式匹配性能

我有一个正则表达式,在找到匹配项时效果很好(500 纳秒),但在没有匹配项时需要很长时间(超过 3 秒)。我怀疑这可能是因为回溯。我尝试了一些选项,例如根据某些文档进行转换.*(.*)?但没有帮助。

输入:一个非常长的字符串 - 在某些情况下为 5k 个字符。

正则表达式匹配:.*substring1.*substring2.*

我正在预编译模式并重新使用匹配器,我还能尝试什么?

这是我的代码片段 - 我将使用数百万个不同的输入字符串调用此方法,但只有少数正则表达式模式。

private static HashMap<String, Pattern> patternMap = new HashMap<String, Pattern>();
private static HashMap<String, Matcher> matcherMap = new HashMap<String, Matcher>();
Run Code Online (Sandbox Code Playgroud)

这是我的方法:

public static Boolean regex_match(String line, String regex) {
    if (regex == null || line == null) {
      return null;
    }
    if (!patternMap.containsKey(regex)) {
      patternMap.put(regex, Pattern.compile(regex));
      matcherMap.put(regex,patternMap.get(regex).matcher(""));
    }
    return matcherMap.get(regex).reset(line).find(0);
 }
Run Code Online (Sandbox Code Playgroud)

java regex

5
推荐指数
1
解决办法
4903
查看次数

group by子句中的sparkSQL Map列

我正在将查询从Hive迁移到SparkSQL,但是遇到Map列问题。

我的查询是

spark.sql(select col1,col2,my_map,count(*) from table group by col1,col2,my_map)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

`my_map` cannot be used as a grouping expression because its data type map<string,string> is not an orderable data type.;
Run Code Online (Sandbox Code Playgroud)

my_map中的键总是变化的。我尝试使用不推荐使用的HiveContext,但这没有帮助。有什么解决方法吗?

谢谢!

apache-spark apache-spark-sql spark-dataframe

5
推荐指数
1
解决办法
771
查看次数

可变长度图案 GraphFrames

我正在尝试使用 GraphFrames 查找从节点 A 到节点 B 且路径长度 < 10 的所有路径。我可以使用以下代码来做到这一点,但是,想知道是否有更好的方法来做到这一点。

val graph = GraphFrame(vertices, edges)


val motif1 = graph.find("(start)-[]->(d1)").select($"start.id".as("start_id"), $"d1.id".as("end_id"))
val motif2 = graph.find("(start)-[]->(d1); (d1)-[]->(d2)").select($"start.id".as("start_id"), $"d2.id".as("end_id"))
val motif3 = graph.find("(start)-[]->(d1); (d1)-[]->(d2); (d2)-[]->(d3)").select($"start.id".as("start_id"), $"d3.id".as("end_id"))
val motif4 = graph.find("(start)-[]->(d1); (d1)-[]->(d2); (d2)-[]->(d3); (d3)-[]->(d4)").select($"start.id".as("start_id"), $"d4.id".as("end_id"))
val motif5 = graph.find("(start)-[]->(d1); (d1)-[]->(d2); (d2)-[]->(d3); (d3)-[]->(d4)  ; (d4)-[]->(d5) ").select($"start.id".as("start_id"), $"d5.id".as("end_id"))
val motif6 = graph.find("(start)-[]->(d1); (d1)-[]->(d2); (d2)-[]->(d3); (d3)-[]->(d4)  ; (d4)-[]->(d5) ;  (d5)-[]->(d6)").select($"start.id".as("start_id"), $"d6.id".as("end_id"))
val motif7 = graph.find("(start)-[]->(d1); (d1)-[]->(d2); (d2)-[]->(d3); (d3)-[]->(d4) ; (d4)-[]->(d5) ;  (d5)-[]->(d6) ;  (d6)-[]->(d7) ").select($"start.id".as("start_id"), $"d7.id".as("end_id"))
val …
Run Code Online (Sandbox Code Playgroud)

graph apache-spark graphframes

5
推荐指数
1
解决办法
690
查看次数

Antlr4 语法 字符串周围的可选括号

我正在尝试编写一个语法来评估可能会或可能不会被括号包围的方程。前任 -

  1. (str1 不匹配 'hello')
  2. NOT(str1 匹配 'hello')
  3. (不是(str1 匹配 'hello'))
  4. str1 不匹配 'hello'

在我的规则中,我有

clause
: expression EOF
;

expression
 :
   LPAREN expression RPAREN                            #parenExpression
 | isNumeric                                     #isNumericExpression
 | leftSide IS NOT? NULL                               #nullExpression
 | compare                                           #comparatorExpression
 | NOT                                                 #notExpression

;


compare : NOT? LPAREN? NOT? leftSide op=comparator rightSide RPAREN? ;
Run Code Online (Sandbox Code Playgroud)

现在,这有几个问题。

  1. 我不检查左括号和右括号是否匹配。
  2. 子句中最多有一个 NOT。

任何有关如何为这些规则编写语法的帮助都会非常有帮助。

提前致谢!

regex parsing antlr antlr4

2
推荐指数
1
解决办法
916
查看次数