Java 正则表达式:在段落中出现任何字符串列表后,删除任何单词中的后缀字符串
我有一个更大的字符串和一个字符串列表。我想改变较大的字符串,这样 -对于列表中较大字符串中出现的任何字符串,请删除后缀部分,直到下一个空格 更大的字符串 名单 我需要删除像e93bc60a0041和f6beefc4b44e4b这样的后缀,它们在时间\ ID \类别和页面\印象之后出现 我期待以下结果。我需要基于正则表达式/有效的java解决方案来实现同样的目标Java 正则表达式:在段落中出现任何字符串列表后,删除任何单词中的后缀字符串,java,regex,string,string-matching,Java,Regex,String,String Matching,我有一个更大的字符串和一个字符串列表。我想改变较大的字符串,这样 -对于列表中较大字符串中出现的任何字符串,请删除后缀部分,直到下一个空格 更大的字符串 名单 我需要删除像e93bc60a0041和f6beefc4b44e4b这样的后缀,它们在时间\ ID \类别和页面\印象之后出现 我期待以下结果。我需要基于正则表达式/有效的java解决方案来实现同样的目标 WITH dataTab0 AS (SELECT TO_CHAR(to_date(tab_0_0.times),'YYYYMMDD')
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个长度的子字符串,那么替换为空字符串实际上可能在这里起作用
如果您希望探索/简化/修改该表达式,它已被删除 在的右上面板上进行了说明 . 如果你愿意,你可以 也可以观看,它将如何匹配 对照一些样本输入
像这样的怎么样?基本上将时间\ ID \类别或页面\印象匹配到第1组,并将后面的任何内容(即后缀)作为第2组
(TIME_ID_CATEGORY|PAGE_IMPRESSION)(\w+)
然后简单地用空字符串替换组2的内容。或者只替换为组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
}
}
不是固定列表,它可以接近100。它不是固定的14位数字。这里的$1是什么意思。@VINOT10这是指组-$1是组1,$2是组2。
(TIME_ID_CATEGORY|PAGE_IMPRESSION)(\w+)
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
}
}