java - 拆开一根绳子并更换它

标签 java regex

我最近一直在绞尽脑汁,似乎无法弄清楚如何从该字符串中提取“文本”并用这些单词替换找到的模式。

Pattern searchPattern = Pattern.compile("\\[\\{(.+?)\\}\\]"); 
Matcher matcher = searchPattern.matcher(sb);

sb 是包含这些模式的几次出现的字符串,这些模式以 [{ 开头并以 ]} 结尾。

[{ md : {o : "set", et : _LU.et.v.v }, d : {t : _LU.el.searchtype, l : _LU[_LU.el.searchtype].nfts.l, v : _LU[_LU.el.searchtype].nfts.v}}, { md : {o : "set", et : _LU.et.v.v }, d : {t : _LU.el.topicgroup, l : "Books", v : "ETBO"}}]

返回为

md : {o : "set", et : _LU.et.v.v }, d : {t : _LU.el.searchtype, l : _LU[_LU.el.searchtype].nfts.l, v : _LU[_LU.el.searchtype].nfts.v}}, { md : {o : "set", et : _LU.et.v.v }, d : {t : _LU.el.topicgroup, l : "Books", v : "ETBO"}

请注意缺少 [{}]。我设法找到上述模式,但如何找到单词 setBook,然后仅用这些单词替换原始找到的模式。如果字符串包含 " via

,我可以搜索该字符串
while (matcher.find()) {
        matcher.group(1).contains("\"");

但我真的只需要一些关于如何去做这件事的想法。

最佳答案

这是您正在寻找的东西(根据您的第一条评论回答)?

its actually fairly large.. but goes along the lines of "hello my name is, etc, etc, etc, [{ md : {o : "set", et : _LU.et.v.v }, d : {t : _LU.el.searchtype, l : _LU[_LU.el.searchtype].nfts.l, v : _LU[_LU.el.searchtype].nfts.v}}, { md : {o : "set", et : _LU.et.v.v }, d : {t : _LU.el.topicgroup, l : "Books", v : "ETBO"}}] , some more text here, and some more" -> the [{ }] parts should be replaced with the text inside of them in this case set, books, etbo... resulting in a final string of "hello my name is, etc, etc, etc, set set Books ETBO , some more text here, and some more"

// text from your comment
String sb = "hello my name is, etc, etc, etc, [{ md : "
        + "{o : \"set\", et : _LU.et.v.v }, d : {t : "
        + "_LU.el.searchtype, l : _LU[_LU.el.searchtype].nfts.l, "
        + "v : _LU[_LU.el.searchtype].nfts.v}}, { md : {o : "
        + "\"set\", et : _LU.et.v.v }, d : {t : _LU.el.topicgroup, "
        + "l : \"Books\", v : \"ETBO\"}}] , "
        + "some more text here, and some more";

Pattern searchPattern = Pattern.compile("\\[\\{(.+?)\\}\\]");
Matcher matcher = searchPattern.matcher(sb);

// pattern that finds words between quotes
Pattern serchWordsInQuores = Pattern.compile("\"(.+?)\"");

// here I will collect words in quotes placed in [{ and }] and separate 
// them with one space
StringBuilder words = new StringBuilder();

// buffer used while replacing [{ xxx }] part with words found in xxx
StringBuffer output = new StringBuffer();

while (matcher.find()) {// looking for [{ xxx }]
    words.delete(0, words.length());

    //now I search for words in quotes from [{ xxx }]
    Matcher m = serchWordsInQuores.matcher(matcher.group());
    while (m.find())
        words.append(m.group(1)).append(" ");

    matcher.appendReplacement(output, words.toString().trim());
    //trim was used to remove last space
}
//we also need to append last part of String that wasn't used in matcher
matcher.appendTail(output);

System.out.println(output);

输出:

hello my name is, etc, etc, etc, set set Books ETBO , some more text here, and some more

关于java - 拆开一根绳子并更换它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518835/

相关文章:

java - 屏幕未反射(reflect) Android 中 Firebase 数据库的更改

java - 访问测试包中的静态变量

java - 如何使用 Pyjnius 正确访问 Android java 类

java - 从字符串列表中删除停用词

javascript - 正则表达式难题

Java:来自 class.getResource( ... ) 的 NullPointerException

javascript - 正则表达式替换 HTML 标签

regex - 如何快速找到与正则表达式匹配的文件的第一行?

python - python 中的正则表达式,这可以改进吗?

javascript - 如何忽略正则表达式中的某些字符?