从Java中的字符串中删除前导的非数字字符

时间:2015-07-09 19:40:22

标签: java regex

我需要将字符串中的所有前导和尾随字符分别剥离到第一个和最后一个数字。

示例:OBC9187A-1%A
应该返回:9187A-1

如何在Java中实现这一目标?

我理解正则表达式是解决方案,但我不擅长它 我试过这个replaceAll("([^0-9.*0-9])","")
但它只返回数字并删除所有字母/特殊字符。

2 个答案:

答案 0 :(得分:3)

以下是使用$('#btnPrint').click(function() { $.ajax({ url: '{{ route('getPDF') }}', type: 'POST', cache: false, data: {data: html}, }) .done(function(data) { // what should be placed here }) .fail(function() { console.log("error"); }); }); regex解决问题的自包含示例。我建议查看某种类型的正则表达式教程here是一个很好的。

java

输出:

public static void main(String[] args) throws FileNotFoundException {
    String test = "OBC9187A-1%A";
    Pattern p = Pattern.compile("\\d.*\\d");
    Matcher m = p.matcher(test);

    while (m.find()) {
        System.out.println("Match: " + m.group());
    }
}

Match: 9187A-1 匹配任何数字\d匹配任何0次或多次.*匹配任何数字。我们使用\d的原因是为\\d \转义Java,因为\是一个特殊字符...所以此正则表达式将匹配一个数字,后跟任何后跟另一个数字数字。这是贪婪的,所以它将采取最长/最大/最贪婪的匹配,因此它将获得第一个和最后一个数字以及介于两者之间的任何数字。 while循环在那里,因为如果有超过1个匹配,它将遍历所有匹配。在这种情况下,只能有1个匹配,因此您可以离开while循环或更改为if,如下所示:

if(m.find()) 
{
    System.out.println("Match: " + m.group());
}

答案 1 :(得分:2)

这将从字符串s中删除前导和尾随的非数字字符。

String s = "OBC9187A-1%A";
s = s.replaceAll("^\\D+", "").replaceAll("\\D+$", "");
System.out.println(s);
// prints 9187A-1

DEMO

正则表达式解释
^ \ d +

^ assert position at start of the string
\D+ match any character that's not a digit [^0-9]
     Quantifier: + Between one and unlimited times, as many times as possible

<强> \ d + $

\D+ match any character that's not a digit [^0-9]
     Quantifier: + Between one and unlimited times, as many times as possible
  $ assert position at end of the string