如何使用Java正则表达式从字符串中提取数字?

3

我得到了一个包含货币符号($50、$4)或文本“未安排”的字符串。我需要提取数字,或在文本的情况下替换为0。

例如:

$45 would give me 45
 £55 would give me 55
not arranged gives 0 or nothing
       44 would give 44

我被告知.(.*[0-9])可以使用。但是,仅当假设第一个字符是货币符号时才有效。如果省略该符号或添加额外的前导空格,则不起作用。最重要的是,我不理解代码.(.*[0-9])。有人能解释一下吗?
当我试图自己创建正则表达式时,我认为[0-9]*会起作用,但它并没有。我认为[0-9]代表数字,因此如果我想捕获所有数字,我将使用[0-9]*。但它不起作用。
我应该如何使用正则表达式代码而非Java代码将文本“未安排”替换为0?
我正在使用http://www.regexplanet.com/advanced/java/index.html进行测试。

1
你的输入和期望输出是什么? - Avinash Raj
1个回答

2

类似这样(假设要测试的字符串名为subjectString):

String theNumbers = null;
Pattern regex = Pattern.compile("\\d+");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
    theNumbers = regexMatcher.group();
} 
else subjectString = "0";

它能工作,但你能否将其通用化,使其不依赖于货币符号?类似于“从字符串中获取数字,且该数字可以从任何位置开始”这样的内容。 - Radek
尝试这个正则表达式(\\d+),最后打印第1组。 - Avinash Raj
是的,请查看已编辑的代码。 :) - zx81
明白了,现在它可以工作了。谢谢。 - Radek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接