我有一组下面的字符串:
*H. NGUYEN1, J. SATZ2,3,4,5, R. TURK2,3,4,5, K. CAMPBELL2,3,4,5, S. MOORE1
1Pathology, 2Mol. Physiol. and Biophysics, 3Neurol., 4Intrnl. Med., Univ. of Iowa, Iowa City, IA; 5Howard Hughes Med. Inst., Iowa City, IA
预期的输出是:
1) *H. NGUYEN1, J. SATZ2,3,4,5, R. TURK2,3,4,5, K. CAMPBELL2,3,4,5, S. MOORE1
2) 1Pathology, 2Mol. Physiol. and Biophysics, 3Neurol., 4Intrnl. Med., Univ. of Iowa, Iowa City, IA; 5Howard Hughes Med. Inst., Iowa City, IA
上面的字符串是作者姓名和地址的组合。
有时字符串在名称结束后包含 (;),即 S。 MOORE1; 有时不是,即 S.摩尔1
我尝试了下面的正则表达式,但没有给出预期的结果。请帮助我,因为我是正则表达式的学习者。
;?[\d*]\w+
模式是:
Word followed by digit followed by semicolon or space followed by digit followed by words . For Ex: S. MOORE1(; Or Space)1Pathology.Need to split lines as S .MOORE1 and 1Pathology
Thanks
最佳答案
试试这个:
(?<=\w\d)[; ](?=\d\w)
它将匹配;或空格前面是一个字母,然后是一个数字,然后是一个数字和一个字母。
编辑:考虑到 , 和 ;空格和可能的换行符
(?<=[\w,]\d)[; ]+[\r\n\f]*(?=\d\w)
这是一个 refiddle:http://refiddle.com/9ed
您也可以使用 Expresso用于测试正则表达式
关于c# - 使用正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751240/