使用 replaceAll() 在字符串中查找三位数
Find a three-digit number in a string using replaceAll()
我有 String
需要从中提取关键字。
类似于:“我有 100 个朋友和 1 个坏人”。
我只需要使用 replaceAll
函数和适当的 regex
.
从 String
中提取“100”
我试过这样做:
String input = "I have 100 friends and 1 evil";
String result = input.replaceAll("[^\d{3}]", "")
但是没用。任何帮助将不胜感激。
您可以考虑以下任何一种解决方案:
String result = input.replaceFirst(".*?(\d{3}).*", "");
String result = input.replaceFirst(".*?(?<!\d)(\d{3})(?!\d).*", "");
String result = input.replaceFirst(".*?\b(\d{3})\b.*", "");
String result = input.replaceFirst(".*?(?<!\S)(\d{3})(?!\S).*", "");
见regex demo。 注意你也可以在这里使用replaceAll
,但它没有意义,因为在这种情况下只能进行一次替换。
这里,
.*?
- 匹配除换行字符以外的任何零个或多个字符,尽可能少
(\d{3})
- 将任意三位数字捕获到第 1 组中
.*
- 匹配除换行字符以外的任何零个或多个字符,尽可能多。
(?<!\d)
/ (?!\d)
环视是数字边界,如果序列是四位或更多数字则不匹配。 \b
是单词边界,不会有匹配的三个数字粘在一个字母,数字或下划线。 (?<!\S)
/ (?!\S)
环视是白色 space 边界,匹配前必须有 space 或字符串开头,匹配后必须有 space 或字符串结尾.
替换为</code>,第1组的值</p>
<p>参见 <a href="https://ideone.com/NlLg5w" rel="nofollow noreferrer">Java demo</a>:</p>
<pre><code>String input = "I have 100 friends and 1 evil";
System.out.println(input.replaceFirst(".*?(\d{3}).*", ""));
System.out.println(input.replaceFirst(".*?(?<!\d)(\d{3})(?!\d).*", ""));
System.out.println(input.replaceFirst(".*?\b(\d{3})\b.*", ""));
System.out.println(input.replaceFirst(".*?(?<!\S)(\d{3})(?!\S).*", ""));
全部输出100
.
我有 String
需要从中提取关键字。
类似于:“我有 100 个朋友和 1 个坏人”。
我只需要使用 replaceAll
函数和适当的 regex
.
String
中提取“100”
我试过这样做:
String input = "I have 100 friends and 1 evil";
String result = input.replaceAll("[^\d{3}]", "")
但是没用。任何帮助将不胜感激。
您可以考虑以下任何一种解决方案:
String result = input.replaceFirst(".*?(\d{3}).*", "");
String result = input.replaceFirst(".*?(?<!\d)(\d{3})(?!\d).*", "");
String result = input.replaceFirst(".*?\b(\d{3})\b.*", "");
String result = input.replaceFirst(".*?(?<!\S)(\d{3})(?!\S).*", "");
见regex demo。 注意你也可以在这里使用replaceAll
,但它没有意义,因为在这种情况下只能进行一次替换。
这里,
.*?
- 匹配除换行字符以外的任何零个或多个字符,尽可能少(\d{3})
- 将任意三位数字捕获到第 1 组中.*
- 匹配除换行字符以外的任何零个或多个字符,尽可能多。
(?<!\d)
/ (?!\d)
环视是数字边界,如果序列是四位或更多数字则不匹配。 \b
是单词边界,不会有匹配的三个数字粘在一个字母,数字或下划线。 (?<!\S)
/ (?!\S)
环视是白色 space 边界,匹配前必须有 space 或字符串开头,匹配后必须有 space 或字符串结尾.
替换为</code>,第1组的值</p>
<p>参见 <a href="https://ideone.com/NlLg5w" rel="nofollow noreferrer">Java demo</a>:</p>
<pre><code>String input = "I have 100 friends and 1 evil";
System.out.println(input.replaceFirst(".*?(\d{3}).*", ""));
System.out.println(input.replaceFirst(".*?(?<!\d)(\d{3})(?!\d).*", ""));
System.out.println(input.replaceFirst(".*?\b(\d{3})\b.*", ""));
System.out.println(input.replaceFirst(".*?(?<!\S)(\d{3})(?!\S).*", ""));
全部输出100
.