请问,Java这个正则表达式怎么写?

jamex 2021-03-30 11:36:26
请问,Java这个正则表达式怎么写?

比如,我有个text="1-18848475154???PosRecOwner??_genesys???Activity_ID? 1-8NR2C53???SRNumber?
1-18850439413???CountryCode??1???Primary_Target_EWT??22???Default"

我想匹配下面的格式字符串
"???Activity_ID? 1-8NR2C53???"

然后取出值 “1-8NR2C53”

"???Activity_ID? 1-8NR2C53???" 这个格式字符串里,前后"???Activity_ID? "和"???"都是固定的字符。
只有“1-8NR2C53”这个值串是动态可变的。现在我要搜索出这个动态的值串。

请高手赐教,分享Java代码实现以上功能。

string function getActivityIDValue(string text)
{
//请赐代码-搜索text中的Activity_ID后面的的值串并返回

return
}


万分感谢!!
...全文
268 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2021-04-07
  • 打赏
  • 举报
回复
给楼主一点意见哈。 1. text 里面的 ?符号,应该是编码转换时出错时的占位符,所以,很明显,数据来源应该是二进制的数据,里面应该包含相应的数据格式。 2. 既然数据源是二进制数据,那么,正经的做法应该是找到相应的数据格式,进行数据解析,从而提取相应的数据内容。 3. 根据正则提取的数据,可能存在隐患。因为,text 是解码失败的结果,这个数据并不可靠,可能存在看不见的一些字符在其中(比如制表符等),从而造成提取的数据存在差异。
hbhbhbhbhb1021 2021-04-01
  • 打赏
  • 举报
回复
引用 1 楼 顾染尘 的回复:
想问一下 1-8NR2C53”这个值串是动态可变的,已经包含了数字、字符、字母三种, 第一个问题 里面会不会包含有‘?’字符 ? 第二个问题为什么不用字符串截取呢? 第三个问题使用正则和字符串截取有什么优点? 希望能得到解答,谢谢!
里面有?号也没关系,别有三个问号就行,如果有的话,就要换一个正则 字符串截取没这个灵活,如果截取可以,正则也一定行 正则的好处有很多,比如预查和贪婪匹配,这些截取都不好搞
hbhbhbhbhb1021 2021-04-01
  • 打赏
  • 举报
回复
这个还好啊,只用一个非贪婪匹配就行
package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test5 {
    public static void main(String[] args) {
        String str="1-18848475154???PosRecOwner??_genesys???Activity_ID? 1-8NR2C53???SRNumber?\n" +
                "1-18850439413???CountryCode??1???Primary_Target_EWT??22???Default";
        String pattern = "\\?\\?\\?Activity_ID\\?\\s(.+)\\?\\?\\?";

        // 创建 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 现在创建 matcher 对象
        Matcher m = r.matcher(str);
        if (m.find( )) {
            System.out.println("Found value: " + m.group(1) );
        } else {
            System.out.println("NO MATCH");
        }
    }
}
qq_39936465 2021-04-01
  • 打赏
  • 举报
回复
引用 楼主 jamex 的回复:
请问,Java这个正则表达式怎么写? 比如,我有个text="1-18848475154???PosRecOwner??_genesys???Activity_ID? 1-8NR2C53???SRNumber? 1-18850439413???CountryCode??1???Primary_Target_EWT??22???Default" 我想匹配下面的格式字符串 "???Activity_ID? 1-8NR2C53???" 然后取出值 “1-8NR2C53” "???Activity_ID? 1-8NR2C53???" 这个格式字符串里,前后"???Activity_ID? "和"???"都是固定的字符。 只有“1-8NR2C53”这个值串是动态可变的。现在我要搜索出这个动态的值串。 请高手赐教,分享Java代码实现以上功能。 string function getActivityIDValue(string text) { //请赐代码-搜索text中的Activity_ID后面的的值串并返回 return } 万分感谢!!

String   getActivityIDValue(String text) {
		String  pattern = "Activity_ID\\?.*\\?\\?\\?";
		Pattern p = Pattern.compile(pattern);
		Matcher m = p.matcher(text);
		if (m.find()) {
			return m.group(0).split("\\?\\?\\?")[0].substring(12);
		}else {
			return null;
		}
	}

顾染尘 2021-03-31
  • 打赏
  • 举报
回复
想问一下 1-8NR2C53”这个值串是动态可变的,已经包含了数字、字符、字母三种, 第一个问题 里面会不会包含有‘?’字符 ? 第二个问题为什么不用字符串截取呢? 第三个问题使用正则和字符串截取有什么优点? 希望能得到解答,谢谢!
发帖
Java EE

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
帖子事件
创建了帖子
2021-03-30 11:36
社区公告
暂无公告