猿问

正则表达式:在段落中出现任何字符串列表后删除任何单词中的后缀字符串

我有一个更大的字符串和一个字符串列表。我想更改较大的字符串,以便 - 对于列表中较大字符串中出现的任何字符串,删除后缀部分直到下一个空格。

更大的字符串

WITH dataTab0 AS (SELECT TO_CHAR(to_date(tab_0_0.times),'YYYYMMDD')  AS TIME_ID_CATEGORYe93bc60a0041,tab_0_0.request_id AS PAGE_IMPRESSIONf6beefc4b44e4b  FROM full_contents_2

列表

TIME_ID_CATEGORY
PAGE_IMPRESSION
...

我需要删除像 e93bc60a0041 和 f6beefc4b44e4b 这样的后缀,它们在 TIME_ID_CATEGORY 和 PAGE_IMPRESSION 之后出现

我期待以下结果。我需要在 java 中基于正则表达式/有效的解决方案来实现相同的目的。

WITH dataTab0 AS (SELECT TO_CHAR(to_date(tab_0_0.times),'YYYYMMDD')  AS TIME_ID_CATEGORY,tab_0_0.request_id AS PAGE_IMPRESSION  FROM full_contents_2



慕容3067478
浏览 118回答 2
2回答

30秒到达战场

像这样的事情怎么样?本质上将 TIME_ID_CATEGORY 或 PAGE_IMPRESSION 匹配到组 1,并将其后的任何内容(即后缀)匹配为组 2。(TIME_ID_CATEGORY|PAGE_IMPRESSION)(\w+)正则表达式演示然后只需将第 2 组的内容替换为空字符串即可。或者只是替换为 Group 1,这也将消除后缀(请参见下面的代码片段)。示例代码片段:public static void main(String args[]) throws Exception {    String line = "WITH dataTab0 AS (SELECT TO_CHAR(to_date(tab_0_0.times),'YYYYMMDD')  AS TIME_ID_CATEGORYe93bc60a0041,tab_0_0.request_id AS PAGE_IMPRESSIONf6beefc154b44e4b  FROM full_contents_2";    Pattern p = Pattern.compile("(TIME_ID_CATEGORY|PAGE_IMPRESSION)(\\w+)");    Matcher m = p.matcher(line);    if (m.find()) {        String output = m.replaceAll("$1");        System.out.println(output);        //WITH dataTab0 AS (SELECT TO_CHAR(to_date(tab_0_0.times),'YYYYMMDD')  AS TIME_ID_CATEGORY,tab_0_0.request_id AS PAGE_IMPRESSION  FROM full_contents_2    }}

江户川乱折腾

我的猜测是,也许是一个简单的表达,[a-f0-9]{14}如果我们只有那些 14 长度的子字符串,则替换为空字符串可能实际上在这里起作用。
随时随地看视频慕课网APP

相关分类

Java
我要回答