2

我有以下一组字符串:

*H。NGUYEN1, J. SATZ2,3,4,5, R. TURK2,3,4,5, K. CAMPBELL2,3,4,5, S. MOORE1
1Pathology, 2Mol. 生理学。和生物物理学,3Neurol.,4Intrnl。医学,大学。爱荷华州爱荷华州爱荷华州;5霍华德休斯医学。Inst.,爱荷华城,IA

预期的输出是:

1) *H。NGUYEN1, J. SATZ2,3,4,5, R. TURK2,3,4,5, K. CAMPBELL2,3,4,5, S. MOORE1
2) 1Pathology, 2Mol. 生理学。和生物物理学,3Neurol.,4Intrnl。医学,大学。爱荷华州爱荷华州爱荷华州;5霍华德休斯医学。Inst.,爱荷华城,IA

上面的字符串是作者姓名和地址的组合。
有时,字符串在名称结尾后包含 (;),即S. MOORE1;有时不是,即S. MOORE1

我尝试了下面的正则表达式,但没有给出预期的结果。请帮助我,因为我是 Regex 的学习者。

;?[\d*]\w+

模式是:

单词后跟数字后跟分号或空格后跟数字后跟单词。例如:S. MOORE1(; Or Space)1Pathology。需要将线分割为 S.MOORE1 和 1Pathology

谢谢

4

3 回答 3

1

试试这个:

(?<=\w\d)[; ](?=\d\w)

它将匹配;或空格前面是一个字母,然后是一个数字,然后是一个数字和一个字母。

编辑:考虑到 , 和 ;space 和可能的换行符

(?<=[\w,]\d)[; ]+[\r\n\f]*(?=\d\w)

这是一个参考: http: //refiddle.com/9ed

你也可以使用Expresso来测试正则表达式

于 2012-10-05T18:03:07.700 回答
0

试试这个:

(.*)S. MOORE1;{0,1}(.*)

在“S. MOORE1”之前和之后捕获 2 组

于 2012-10-05T17:39:43.373 回答
0

你的描述我看了很多遍,但我没有说清楚。

我最好的猜测是您需要在以“1”开头的单词之前换行,并以大写字母作为第二个字符继续,这很简单:

1[A-Z]
于 2012-10-05T17:58:47.733 回答