Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于奇数货币价值的正则表达式_Java_Regex - Fatal编程技术网

Java 用于奇数货币价值的正则表达式

Java 用于奇数货币价值的正则表达式,java,regex,Java,Regex,我有一个包含奇数货币值的字符串。字符串为: 每日利息费用#901美元17.2789 259.18 190.07/天 奇数值为17.2789美元 我正在尝试创建一个正则表达式,它将获得is,但没有back引用。这就是我想到的: (?:\\$\\s*?\\d{0,1,2,3}\\\\\d{0,1,2,3,4}\\s*?/?天) 但是,这不会编译。那里的一切对我来说都合理吗?你知道这有什么问题吗?我正在使用Java 编辑 我试过m.buettner关于\\$\\s*\\d*\\.\\d*的建议。我把它

我有一个包含奇数货币值的字符串。字符串为:

每日利息费用#901美元17.2789 259.18 190.07/天

奇数值为17.2789美元

我正在尝试创建一个正则表达式,它将获得is,但没有back引用。这就是我想到的:

(?:\\$\\s*?\\d{0,1,2,3}\\\\\d{0,1,2,3,4}\\s*?/?天)

但是,这不会编译。那里的一切对我来说都合理吗?你知道这有什么问题吗?我正在使用Java

编辑

我试过m.buettner关于
\\$\\s*\\d*\\.\\d*
的建议。我把它放在下面的第三组中。这几乎做到了。下面是我的完整正则表达式:

(.*)s?(\s?\d{3,4})s*(?:\$\s*\d*.\d*)(?:-\()?\$(?:\d{1,3}[,])*(?:\d{1,3}[,]?)*(?:\。\d+)\s*(?:-\()(?:-\())(?:\d{1,3}[,])*(?:。。。。。+)*)(?::。。。。。。。。。)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

它吸引的群体包括:

  • 每日利息费用
  • 901
  • 9259.18
  • 190.07
  • 问题出在第三组。它包含一个额外的数字,第一个
    9

    编辑

    有一个空间导致了问题,这就解决了:


    (?:\$\s*\d*\.\d*\s)?

    据我所知
    \\d{0,1,2,3…}
    是无效语法。你的意思可能是:

    (?:\\$\\s*?\\d{0,3}\\.\\d{0,4}\\s*?/?day)?
    
    另外,您是否知道您的整个模式是可选的?这带来了一个问题<代码>\\d{0,3}\.\\d{0,4}将只匹配第一个(奇数)数字。然后,您有一个可选的斜杠,但必须有一个
    (如果没有删除整个模式)。但是在您的输入字符串中,在遇到
    /day
    之前还有一些其他数字。因此,即使它编译,它也不会匹配您的价格值。您可能应该将
    \\s*?/?天
    全部省略。并考虑删除外部的
    。正如Brian在评论中所说,没有必要取消对
    \\s
    重复的冻结,因为它与以下元素是互斥的:

    \\$\\s*\\d{0,3}\\.\\d{0,4}
    
    如果数值是“奇数”的话,你真的需要对数字的数量如此具体吗


    据我所知,
    \\d{0,1,2,3…}
    的语法无效。你的意思可能是:

    (?:\\$\\s*?\\d{0,3}\\.\\d{0,4}\\s*?/?day)?
    
    另外,您是否知道您的整个模式是可选的?这带来了一个问题<代码>\\d{0,3}\.\\d{0,4}将只匹配第一个(奇数)数字。然后,您有一个可选的斜杠,但必须有一个
    (如果没有删除整个模式)。但是在您的输入字符串中,在遇到
    /day
    之前还有一些其他数字。因此,即使它编译,它也不会匹配您的价格值。您可能应该将
    \\s*?/?天
    全部省略。并考虑删除外部的
    。正如Brian在评论中所说,没有必要取消对
    \\s
    重复的冻结,因为它与以下元素是互斥的:

    \\$\\s*\\d{0,3}\\.\\d{0,4}
    
    如果数值是“奇数”的话,你真的需要对数字的数量如此具体吗

    这种模式

    “\\d+\.\\d{3,}”

    将每个数字与点后2位以上的数字匹配。

    此模式

    “\\d+\.\\d{3,}”


    将每个数字与点后超过2位的数字匹配。

    是的,它只是较大数字的一小部分,图中更易于可读。谢谢,让我试一试。+1,打败我:)也不是说
    \\s*?
    是多余的,
    \\s*
    本身就可以了。我知道,但后面的字符永远不会是另一个空格字符,所以不管它有多贪婪。@m.buettner对不起,我是说奇怪中的奇数,而不是奇数。我甚至没有意识到。@m.buettner试过你的建议。99%在那里。请看我的编辑是的,它只是一个较大版本中的一小部分,我想它更易于阅读。谢谢,让我试一试。+1,打败我:)也不是说
    \\s*?
    是多余的,
    \\s*
    本身就可以了。我知道,但后面的字符永远不会是另一个空格字符,所以不管它有多贪婪。@m.buettner对不起,我是说奇怪中的奇数,而不是奇数。我甚至没有意识到。@m.buettner试过你的建议。99%在那里。请参阅我的编辑您的量词(例如,
    {0,1,2,3}
    )看起来不正确,除非这是我不熟悉的变体。量词通常表示为
    {x}
    {x,}
    ,或
    {x,y}
    。你的意思是“奇数”还是“不可被二整除”或“奇怪”?哎呀,对不起,我看到了混淆,我的意思是奇数还是奇怪。它的小数精度为4位。@user489041如果不捕获“奇数”价格值,那么匹配它有什么意义?为什么不跳过它呢?例如,对于给定的字符串,这个正则表达式将为您提供所需的捕获:
    (.*\S)\S*\S*(\d{3,4})。*\d(\d*\.\d*)\S+(\d*\.\d*)/day
    。但当然,对于输入的整个结构,它的具体程度要低得多。如果你告诉我们你的输入中有什么可以改变,哪些参数必须相同,那会有帮助。你的量词(例如
    {0,1,2,3}
    )看起来不正确,除非是我不熟悉的变化。量词通常表示为
    {x}
    {x,}
    ,或
    {x,y}
    。你的意思是“奇数”还是“不可被二整除”或“奇怪”?哎呀,对不起,我看到了混淆,我的意思是奇数还是奇怪。它的小数精度为4位。@user489041如果不捕获“奇数”价格值,那么匹配它有什么意义?为什么不跳过它呢?例如,对于给定的字符串,这个正则表达式将为您提供所需的捕获:
    (.*\S)\S*\S*(\d{3,4})。*\d(\d*\.\d*)\S+(\d*\.\d*)/day
    。但当然,对于输入的整个结构,它的具体程度要低得多。如果您能告诉我们您的输入和输出中真正不同的是什么,这会有所帮助