1

我有一个这样的字符串:1/80% of all goods sold for $44 million dollars or more/90/55 所以基本上我会有一个带模式的字符串:

“一些数字”“正斜杠”“一些带有任何标点符号的文本,包括正斜杠”“正斜杠”“一些数字”“正斜杠”“一些数字”

我不能只使用 stringtokenizer 并对正斜杠进行标记,因为我的文本块中可能有正斜杠。我对在 java 中使用模式和匹配器非常陌生。关于我如何做到这一点的任何线索?或者可能有用的教程?提前致谢!

4

4 回答 4

1

这个正则表达式应该这样做:

^(\d+)\/(.*?)\/(\d+)\/(\d+)$

演示:http ://www.rubular.com/r/ZIhe8iE0L0

于 2012-07-24T15:37:44.103 回答
0

也许这可以作为一个正则表达式:

^\d+/.*/\d+/\d+$

根据需要添加捕获组。只要文本不包含换行符,这应该可以工作。

于 2012-07-24T15:37:35.723 回答
0

您正在寻找 #/#<text>/#/#

这是一些应该工作的代码:

    String toScan = "Did you know that 1/80 of all goods sold for $44 million or more/90/55? It's cool, because 1/5 of all people can type /1/2 like that.";
    String regexp = "[0-9]{1,}/[0-9]{1,}.{1,}?/[0-9]{1,}/[0-9]{1,}";
    Pattern pattern = Pattern.compile(regexp);
    Matcher m = pattern.matcher(toScan);
    while(m.find())
        System.out.println(m.group());
于 2012-07-24T15:41:48.827 回答
0

这是一个简单的测试

import java.util.regex.*;

class RTest
{
public static void main(String[] args)
{
    String test1 = "1/80% of all goods sold for $44 million dollars or more/90/55";
    String test2 = "1/80% of all goods sold for $44 /million dollars or more/90/55";

    String patternStr = "(.*?)/(.*)/(.*?)/(.*?)$";
    Pattern pattern = Pattern.compile(patternStr);

    System.out.println("Test1...");
    // Test 1
    Matcher matcher = pattern.matcher(test1);
    boolean matchFound = matcher.find();

    if (matchFound)
    {
        for (int i = 0; i<=matcher.groupCount(); i++)
        {
            System.out.println(matcher.group(i));
        }
    }

    System.out.println("Test2...");
    // Test 2
    matcher = pattern.matcher(test2);
    matchFound = matcher.find();

    if (matchFound)
    {
        for (int i = 0; i<=matcher.groupCount(); i++)
        {
            System.out.println(matcher.group(i));
        }
    }       
}

}

于 2012-07-24T15:53:20.413 回答