首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - get数字格式的正则表达式

Java - get数字格式的正则表达式
EN

Stack Overflow用户
提问于 2013-04-23 11:41:45
回答 3查看 3K关注 0票数 6

我有这个:

  • 110121自然95 1570 40
  • 110121自然95 1570 40*
  • 41,110 1 x38,20捷克共和国)A*
  • ‘31,831 261,791 1308,61)
  • 01572普拉沃所以17,00
  • 1,000克朗x17,00
  • 1570,40

这个输出的每一行都保存在列表中,我想得到1570,40

对于这种格式,我的正则表达式如下所示

代码语言:javascript
复制
    "([1-9][0-9]*[\\.|,][0-9]{2})[^\\.\\d](.*)"
    "^([1-9][0-9]*[\\.|,][0-9]{2})$"

我有一个问题,1570,40在最后一行如果建立(由第二个正则表达式),也1570,40 (从线1570,40*在末尾),但第一行是没有根据的。你知道问题出在哪里吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-23 11:56:15

我不确定我是否理解你的需要,但我认为你可以用单词的界限,比如:

代码语言:javascript
复制
\b([1-9]\d*[.,]\d{2})\b

为了不匹配日期,可以使用:

代码语言:javascript
复制
(?:^|[^.,\d])(\d+[,.]\d\d)(?:[^.,\d]|$)

解释:

代码语言:javascript
复制
The regular expression:

(?-imsx:(?:^|[^.,\d])(\d+[,.]\d\d)(?:[^.,\d]|$))

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    ^                        the beginning of the string
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    [^.,\d]                  any character except: '.', ',', digits
                             (0-9)
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
  (                        group and capture to \1:
----------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
----------------------------------------------------------------------
    [,.]                     any character of: ',', '.'
----------------------------------------------------------------------
    \d                       digits (0-9)
----------------------------------------------------------------------
    \d                       digits (0-9)
----------------------------------------------------------------------
  )                        end of \1
----------------------------------------------------------------------
  (?:                      group, but do not capture:
----------------------------------------------------------------------
    [^.,\d]                  any character except: '.', ',', digits
                             (0-9)
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
----------------------------------------------------------------------
  )                        end of grouping
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------
票数 1
EN

Stack Overflow用户

发布于 2013-04-23 11:54:52

试试这个:

代码语言:javascript
复制
String s = "41,110 1 x 38,20 CZK)[A] * ";
Matcher m = Pattern.compile("\\d+,\\d+").matcher(s);
while(m.find()) {
    System.out.println(m.group());
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-23 11:56:35

"([1-9][0-9]*[\\.|,][0-9]{2})[^\\.\\d](.*)"[^\\.\\d],这意味着它期望在数字后面有一个非数字的、非点的符号.第二行有与其匹配的*。第一行在行尾有数字,所以没有匹配的。我认为您只需要一个regexp就可以捕获所有的数字:[^.\\d]*([1-9][0-9]*[.,][0-9]{2})[^.\\d]*。另外,您应该使用find而不是match来查找字符串中的任何子字符串,而不是匹配整个字符串。另外,如果一条线中有两个这样的数字,它可能有找到所有匹配的意义,不确定这是否是你的情况。

另外,可以使用[0-9]\d。目前,它令人困惑-它的意思相同,但看上去不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16168458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档