正则表达式的名字和姓氏用空格或破折号

问题描述:

我有一个String with FirstName + "/" + LastName +" "+ DateOfBirthday正则表达式的名字和姓氏用空格或破折号

  1. FirstNameLastName可以包含空格(“‘)和破折号(’ - ”)
  2. DateOfBirthday只能在格式([0-9]{2}+[A-Za-z]+[0-9]{2})和在可以在字符串之前或之后。

请帮我删除DASHSPACEFirstNameLastName

例子:

- 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有更漂亮的解决

+1

给一些样品输入,与预期输出 –

+1

你的代码一起,到目前为止,并与它的具体问题也将是不错。你有尝试过什么吗?正如你的问题所表达的那样,你只是抛弃了我们的要求,看来你只是要求为你做。 – tnw

+0

尝试'additionalInfo.replaceAll(“([a-zA-Z] +)(?:\\ s | - )([a-zA-Z] +)”,“$ 1 $ 2”)' –

可以使用([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 !!!谢谢。 –