【问题标题】:Simple regex between brackets括号之间的简单正则表达式
【发布时间】:2018-12-03 12:15:01
【问题描述】:

对不起,我是个菜鸟,但我已经在论坛上搜索了几个小时,但运气不佳,如果您能提供帮助,非常感谢。

我正在使用 Tasker,我认为它使用了 Java 风格的正则表达式。

我有随机数据,例如:blah blah blah 6521 (3.2g) 345 (8g) 34 etc...

括号之间只有一个数字或一个数字后跟一个十进制数字,(g) 始终保持不变,我只需要提取如下数字:

3.2 & 8 放入 Tasker 将执行的数组中。

我认为应该工作的东西不能正常工作:

\d+.\d+|\d+

它生成所有数字,而不仅仅是(g) 之间的数字

有人指点吗?

非常感谢大家!

编辑:错别字

【问题讨论】:

  • 我认为您必须转义括号,否则它们会分组运算符。
  • 使. 和尾随数字可选,\d+(\.\d)?。我不知道java,但那个正则表达式应该捕获你想要的数值。
  • 谢谢,但不幸的是,这会产生其他不在括号中的数字。我已经编辑了原始数据以进行澄清。再次干杯!

标签: java regex decimal brackets tasker


【解决方案1】:

请尝试以下模式: (?<=\()\d+\.?\d?(?=g\))

Online Demo

【讨论】:

  • 谢谢,但不幸的是,这会产生其他不在括号中的数字。我已经编辑了原始数据以进行澄清。再次干杯!
  • 嗨@binvius:我已经根据您的示例输入更新了模式。请检查它是否符合您的需求。
  • 奎因,你这个美丽的野兽——你只是去破解它!几十个凡人打过仗,但只有你征服了。我非常感谢你为一个随机的陌生人做了一件可爱的事情。继续努力,祝未来一切顺利
【解决方案2】:

下面是一个示例,说明如何做到这一点:

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

public class YourClass {
    public static void main(String args[]) {
        /* Create a list to store the result */
        List<String> allMatches = new ArrayList<String>();
        Matcher m = Pattern.compile("(\\d+).(\\d+)|(\\d+)").matcher("(3.2g) (8g)");

        /* Add the results to list */
        while (m.find()) {
           allMatches.add(m.group());
        }

        /* Print out the result */
        for(int i=0; i< allMatches.size(); i++) {
            System.out.print(allMatches.get(i)+" ");
        }

    }
}

您可以将 (3.2g) (8g) 替换为您的 String 值。 如果需要,您还可以将列表转换为数组。

【讨论】:

  • 为此干杯。我只尝试了正则表达式部分,但没有运气。经过更多小时的尝试,我开始认为使用正则表达式甚至可能无法做到这一点。如果您能提供帮助,请感谢其他人。
【解决方案3】:

要匹配数字,请使用数字,后跟可选的点后数字,前面是左括号:

(?<=\()\d+(\.\d+)?(?=g\))

表达式(?&lt;=\() 是一个向后看,表示前面的字符必须是(,但不会将它作为匹配的一部分使用。

同样,(?=g\)) 断言下一个字符是g)。你可能不需要(?=g\)),但它会拉紧匹配。

【讨论】:

  • 谢谢,但不幸的是,这会产生其他不在括号中的数字。我已经编辑了原始数据以进行澄清。再次干杯!
【解决方案4】:

到目前为止,除了我尝试过的数百个之外,此页面上所有非常友好的建议都从数据字符串中生成了所有数字 6521 3.2 345 8 34,而不仅仅是 (g) 之间的数字只会导致3.2 & 8

\d+.\d+|\d+

\d+(\.\d)?

\d+(\.\d+)?

\d+\.\d+|\d+

("(\\d+).(\\d+)|(\\d+)")

(\\d+).(\\d+)|(\\d+)

不幸的是,这可能是不可能的,或者虽然我一直认为它非常先进,但 Tasker 不喜欢它。

如果有任何正则表达式向导愿意给这个 30 秒破解,我将永远感激不尽。

再次感谢!

【讨论】:

  • 这应该是对您原始帖子的编辑,而不是答案。它似乎没有回答您的问题,并且被其他人的答案所掩盖:)
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 2013-03-13
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多