英文:
Regular Expression in Java to remove the trailing digits including Hyphen symbol
问题
我有很多像下面这样的9位数字的邮政编码。
94107-1532
94107-1532
94107-1535
94107-1511
这九位邮政编码的前面部分是邮政编码的前五位数字,表示目标邮局或投递区域。九位邮政编码的最后4位数字代表该整个投递区域内的特定投递路线。我想去掉包括连字符(`-`)在内的最后4位数字。我尝试了下面的表达式,但没有成功!
public static String removeRoute(String zipCode) {
return zipCode.replaceAll("-\\d$", "");
}
英文:
I’ve lots of 9-digit zip codes like shown below.
94107-1532
94107-1532
94107-1535
94107-1511
The first part is the first five digits of the zip code which indicates the destination post office or delivery area. The last 4 digits of the nine-digit ZIP Code represents a specific delivery route within that overall delivery area. I wanted to remove the last 4 digits starting including the Hyphen symbol(-
). I tried the below expression, but no luck!
public static String removeRoute(String zipCode) {
return zipCode.replaceAll("-\\d$", "");
}
答案1
得分: 2
\\d
只匹配一个数字字符。
使用\\d+
来匹配多个数字,或者使用\\d{4}
来精确匹配四个。
英文:
\\d
only matches one digit character.
Use \\d+
to match multiple or \\d{4}
to match exactly four
答案2
得分: 2
我甚至不会使用正则表达式;只需使用String#split
:
String input = "94107-1532";
String zip = input.split("-")[0];
String poBox = input.split("-")[1];
英文:
I wouldn't even use regex; just use String#split
:
String input = "94107-1532";
String zip = input.split("-")[0];
String poBox = input.split("-")[1];
答案3
得分: 1
你正在匹配字符串末尾的连字符和单个数字。
更精确的匹配方法是捕获前5位数字并匹配末尾的连字符和4位数字。在替换中使用第1组。
^(\d{5})-\d{4}$
或者如果该模式只出现在字符串末尾,你可以使用单词边界,例如:
\b(\d{5})-\d{4}$
示例代码:
public static String removeRoute(String zipCode) {
return zipCode.replaceAll("^(\\d{5})-\\d{4}$", "$1");
}
英文:
You are matching a hyphen and a single digit at the end of the string.
A bit more precise match would be to capture the first 5 digits in a group and match the hyphen and 4 digits at the end. In the replacement use group 1
^(\d{5})-\d{4}$
Or if the pattern can only occur at the end of the string, you can use for example a word boundary
\b(\d{5})-\d{4}$
Example code
public static String removeRoute(String zipCode) {
return zipCode.replaceAll("^(\\d{5})-\\d{4}$", "$1");
}
答案4
得分: 0
你可以在\d
简写之后直接使用星号
或加号
。
zipCode.replaceAll("-\\d+$", "");
或者
zipCode.replaceAll("-\\d*$", "");
星号(*
)表示引擎会尝试零次或多次匹配前面的标记,加号(+
)表示引擎会尝试一次或多次匹配前面的标记。
英文:
You can use an asterisk
or plus sign
right after the \d
shorthand.
zipCode.replaceAll("-\\d+$", "");
OR
zipCode.replaceAll("-\\d*$", "");
The asterisk or star (*
) tells the engine to attempt to match the preceding token zero or more times and the plus (+
)tells the engine to attempt to match the preceding token once or more.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论