模式(最好是java)以平方英尺为单位找到地板空间

模式(最好是java)以平方英尺为单位找到地板空间,java,regex,pattern-matching,Java,Regex,Pattern Matching,我有以下需要解析的数据 图案可能(1)约为1000平方英尺(2)c。500平方英尺(3)2100平方英尺 这是我的代码,以找到一个数字,但我需要上述。。。在爪哇 Pattern regex = Pattern.compile("\\d[\\d,\\.]+"); Matcher finder = regex.matcher(price); if(finder.find()){ try { String value = finder.group(0);

我有以下需要解析的数据

图案可能(1)约为1000平方英尺(2)c。500平方英尺(3)2100平方英尺

这是我的代码,以找到一个数字,但我需要上述。。。在爪哇

 Pattern regex = Pattern.compile("\\d[\\d,\\.]+");
 Matcher finder = regex.matcher(price);
 if(finder.find()){
      try {
            String value = finder.group(0);
            // do something with value
            System.out.println("The floor area is circa " + value + "sq ft";
          } catch (NumberFormatException nfe) {
            // handle unparseable
            System.out.println(nfe.getMessage());
          }
      }
**编辑以响应Pshemo


我想将数据存储在数据库中,所以在平方英尺或平方英尺或平方英尺或.sq.ft之前需要一个数字,例如,2100平方英尺会给我2100。(可能来自描述等长字符串)

您可以对代码进行最小的更改:

  • 有多种方法可以从文本中选择数字,你的方法很不错。稍后我会用括号括起来

    (\\d[\\d,\\.]+)
    
  • 您指定了两个平方英尺的后缀。它们可能是这样的:

    [ ]*(sqft|sq ft)
    
    (approx\\.?|circa|c\\.?)?[ ]*
    
把这两者放在一起,你就会得到你想要的表情。但是如何只选择数字呢?事实证明,每个打开的paren都会创建一个捕获组,该组可能会重叠,您可以使用已经使用的
group
方法提取该组。组0始终是整个匹配表达式,组1是数字,组2是后缀词(sq ft)。选择
group(1)
而不是
group(0)
将获得您想要的号码


p、 虽然很容易指定前缀,但它完全是可选的,所以我省略了它。如果你把它放进去,它可能看起来像这样:

[ ]*(sqft|sq ft)
(approx\\.?|circa|c\\.?)?[ ]*
我会尝试:

Pattern regex = Pattern.compile("(?<= )\\d(\\d*[,\\.]?\\d+)*(?=[ .]?sq)");

Pattern regex=Pattern.compile((?我几乎放弃了。我的解决方案是,但我将修改模式是:

**为了存储一个数字,修改为最佳模式

String url = "The floor area is 2,100 sq ft";
String url2 = "The floor area is 2,100 sqft";
String url3 = "The floor area is 20,000 square foot";
    Pattern.compile("\\d[\\d,\\.]+ (?=[ .]?sq)"); 
    Matcher finder = regex.matcher(url);
    if (finder.find()) {
        try {
            String value = finder.group(0);

            Pattern regex2 = Pattern.compile("\\d[\\d,\\.]+");
            Matcher finder2 = regex2.matcher(value);
            System.out.println(value);
            if (finder2.find()) {
                String value2 = finder2.group(0);
            // do something with value
            System.out.println("The floor area is circa " + value2 + " sq     
                                                       ft");
            }
        } catch (NumberFormatException nfe) {
            // handle unparseable
            System.out.println(nfe.getMessage());
        }
    }

由于我不知道大约1000平方英尺(2)c.500平方英尺(3)2100平方英尺(3)是您想要查找的字符串,还是您想要查找的数据示例列表(1)大约1000平方英尺(2)
c.500平方英尺(3)
2100平方英尺
,或者您想要的只是像(1)这样的数字大约
1000
sq-ft(2)c.
500
sqft(3)
2100
sq-ftIt似乎非常简单:您有一个可选的前导(“大约”、“c.”等),一个可能用逗号分隔的数字,然后是一个后缀(“sqft”、“sq-ft”等).除了编写替换代码之外,这里还有什么特别有问题的地方吗?@jeff我想我需要一个模式来匹配数字和平方英尺或平方英尺,然后再使用另一个模式来从长描述中获取数字**开始时可能不是大约、大约或c