正则表达式的名字和姓氏用空格或破折号
问题描述:
我有一个String with FirstName + "/" + LastName +" "+ DateOfBirthday
正则表达式的名字和姓氏用空格或破折号
-
FirstName
和LastName
可以包含空格(“‘)和破折号(’ - ”) -
DateOfBirthday
只能在格式([0-9]{2}+[A-Za-z]+[0-9]{2})
和在可以在字符串之前或之后。
请帮我删除DASH
和SPACE
在FirstName
和LastName
例子:
- Hanry Klark/Jacobson 23FEB16 - HanryKlark/Jacobson 23FEB16
- Hanry-Klark/Jaco-Bson 23FEB16 - HanryKlark/JacoBson 23FEB16
- Hanry/Jaco 23FEB16 - Hanry/Jaco 23FEB16
- 23FEB16 Hanry-Klark/Jaco Bson - 23FEB16 HanryKlark/JacoBson
我试过,但...
String additionalInfo = "23FEB16 Hanry-Klark/Jaco Bson";
String datePattren = "[0-9]{1,}+[A-Za-z]+[0-9]{1,}";
Pattern pattern = Pattern.compile(datePattren);
Matcher matcher = pattern.matcher(additionalInfo);
matcher.find();
String Date = matcher.group();
additionalInfo = additionalInfo.replaceAll(datePattren, "").replaceAll(" ", "").replaceAll("-","");
if (Date!=""){
additionalInfo = additionalInfo + " " + Date;
}
Meybe有更漂亮的解决
答
可以使用([a-zA-Z]+)(?:\\s|-)([a-zA-Z]+)
与replaceAll
([a-zA-Z]+)
:捕获一个或多个字母,通过$1
(?:\\s|-)
表示:非捕获组来匹配空间或-
字符
([a-zA-Z]+)
:捕获一个或更多字母表示,由$2
因此,使用:additionalInfo.replaceAll("([a-zA-Z]+)(?:\\s|-)([a-zA-Z]+)", "$1$2")
演示
const aar =['Hanry Klark/Jacobson 23FEB16','Hanry-Klark/Jaco-Bson 23FEB16',
'Hanry/Jaco 23FEB16','23FEB16 Hanry-Klark/Jaco Bson']
const regex =/([a-zA-Z]+)(?:\s|-)([a-zA-Z]+)/g;
for(var i in aar)
console.log(aar[i].replace(regex,'$1$2'));
+1
greate !!!谢谢。 –
给一些样品输入,与预期输出 –
你的代码一起,到目前为止,并与它的具体问题也将是不错。你有尝试过什么吗?正如你的问题所表达的那样,你只是抛弃了我们的要求,看来你只是要求为你做。 – tnw
尝试'additionalInfo.replaceAll(“([a-zA-Z] +)(?:\\ s | - )([a-zA-Z] +)”,“$ 1 $ 2”)' –