是否有某种规则引擎或一些聪明的方法来做到这一点?
我有一根这样的绳子:
test 1-2-22这样我就可以得到这些值:
name = "test"
part_id = 1
brand_id = 2
count = 22我有更多这些所谓的规则,从中我知道字符串的格式。
我在想我可以用regex来做这个,但是有更好的方法来代替吗?
编辑:
我看到了一些很好的答案。也许我应该说得更清楚些。这不是我可能拥有的唯一的字符串类型,我可以拥有这样的字符串:
test 3-brand 15 – 2解析后的内容应该是:
name = "test"
part_id = 2
brand_id = 3
count = 15所以我可以有不同的字符串,我需要为每个字符串定义一个规则/模式。做这件事的好方法是什么?Regex目前是一种选择。
发布于 2013-11-27 10:36:20
可以使用以下表达式在空格和破折号之间拆分:
[ -]然后,您将在从0开始的索引中找到不同的组件。
在Java中:
String input = "test 1-2-22";
String[] results = input.split("[ -]");发布于 2013-11-27 10:36:21
您可以使用这个Pattern regex
Pattern pattern = Pattern.compile("^([a-zA-Z]+)\\s*([^-]+)-([^-]+)-([^-]+)$");那么这段代码应该可以工作:
String line = "test 1-2-22";
Pattern pattern = Pattern.compile("^([a-zA-Z]+)\\s*([^-]+)-([^-]+)-([^-]+)$");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
System.out.printf("name:%s, part_id:%s, brand_id:%s, count:%s%n",
matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(4) );
}发布于 2013-11-27 10:37:10
在这种情况下,合适的split操作(或其他手动字符串处理)可能是最简单的,因为您有需要显式查找的空白和破折号。
对于更复杂的模式,您可以查看antlr,将其标记为(例如)一个identifier和三个number令牌,然后解析它,但这似乎有点过分。(这会给你一个“规则引擎”,砰。)
一般情况下:您可能需要阅读解析和上下文无关语法的相关内容。
https://stackoverflow.com/questions/20240006
复制相似问题