【发布时间】:2019-03-22 18:25:05
【问题描述】:
我有一个字符串,结构如下:
ABCD123456EFGHIJ78 但有时会缺少数字或字符,例如:
ABC123456EFGHIJ78 或 ABCD123456E 或 ABCD12345EFGHIJ78 等等。
这就是我需要正则表达式的原因。
我要提取的是第三组的第一个字母,在本例中为“E”。
我有以下正则表达式:
(\D+)+(\d+)+(\D{1})\3
但我没有收到字母 E。
【问题讨论】:
标签: regex
我有一个字符串,结构如下:
ABCD123456EFGHIJ78 但有时会缺少数字或字符,例如:
ABC123456EFGHIJ78 或 ABCD123456E 或 ABCD12345EFGHIJ78 等等。
这就是我需要正则表达式的原因。
我要提取的是第三组的第一个字母,在本例中为“E”。
我有以下正则表达式:
(\D+)+(\d+)+(\D{1})\3
但我没有收到字母 E。
【问题讨论】:
标签: regex
这似乎适用于您提供的示例案例。
^(?:[A-Za-z]+)(?:\d+)(.)
假设第一组只有字母,第二组只有数字。
【讨论】:
已经有一个很好的答案。
但据记录,您最初的提案非常接近工作。你只需要说匹配第3组的字符可以通过添加星号重复多次:
^(\D+)(\d+)(\D{1})\3*
主要的弱点是\D 匹配除数字以外的任何字符,空格也是如此。让它更健壮导致我们明确接受的字符范围:
^([A-Za-z]+)(\d+)([A-Za-z]{1})\3*
好多了,但我最喜欢使用\w 在模式末尾匹配任何非白色字符:
([A-Za-z]+)(\d+)([A-Za-z]{1})\w*
【讨论】: