【发布时间】:2011-10-16 13:11:01
【问题描述】:
我有两个字符串
string1 = 44.365 Online order
和string2 = 0 Request Delivery。现在我想对这些字符串应用一个正则表达式,过滤掉除数字之外的所有内容,这样我就得到了像string1 = 44365和string2 = 0这样的整数。
我怎样才能做到这一点?
【问题讨论】:
我有两个字符串
string1 = 44.365 Online order
和string2 = 0 Request Delivery。现在我想对这些字符串应用一个正则表达式,过滤掉除数字之外的所有内容,这样我就得到了像string1 = 44365和string2 = 0这样的整数。
我怎样才能做到这一点?
【问题讨论】:
您可以使用^。它会考虑除您面前的一切之外的一切。
因此,如果您有 [^y],它将过滤除 y 之外的所有内容。在你的情况下,你会做类似的事情
String value = string.replaceAll("[^0-9]","");
其中字符串是保存实际文本的变量!
【讨论】:
\D 作为模式将缩短 67%。 ;)
- 开头,所以像[^-?0-9] 这样的东西应该可以解决问题。 -? 告诉正则表达式引擎匹配 - 如果它存在(0 或无)。
String clean1 = string1.replaceAll("[^0-9]", "");
或
String clean2 = string2.replaceAll("[^\\d]", "");
其中\d 是[0-9] 字符类的快捷方式,
或
String clean3 = string1.replaceAll("\\D", "");
其中\D 是\d 类的否定(表示[^0-9])
【讨论】:
string1 = string1.replaceAll("[^0-9]", "");
string2 = string2.replaceAll("[^0-9]", "");
【讨论】:
String alphanumeric = "12ABC34def";
String digits = CharMatcher.JAVA_DIGIT.retainFrom(alphanumeric); // 1234
String letters = CharMatcher.JAVA_LETTER.retainFrom(alphanumeric); // ABCdef
如果您只关心匹配 ASCII 数字,请使用
String digits = CharMatcher.inRange('0', '9').retainFrom(alphanumeric); // 1234
如果您只想匹配拉丁字母,请使用
String letters = CharMatcher.inRange('a', 'z')
.or(inRange('A', 'Z')).retainFrom(alphanumeric); // ABCdef
【讨论】: