2017-06-12 46 views
0

我想使用1到8个字符之间的正则表达式提取文本,不包含2个以上的字母([A-Za-z])。正则表达式 - 提取1到8个字符之间的文本,但不包含超过2个字母([A-Za-z])

例如:

Valid: "12A-32B" from the text "Register:12A-32B Index:A" 
Invalid: "12 Index" from the text "Register:12 Index:A" 

在这个例子中,所提取的文本应该有文字“注册”为界。

我试过使用积极/消极的前瞻,但无济于事。

谢谢。

+0

从'注册:12A-32B索引:A' - 为什么不应该呃:12'还是'32B I'?为什么不从第二个'r:12 I'?我认为它与单词边界有关(**,但在问题**中没有说明)。继续:第二个':12'? ':A'来自同一个?为什么不是那些? – ClasG

+0

我编辑了说明正则表达式边界的问题。 – Daniel

回答

2

试试这个正则表达式:

^(?!.*[A-Za-z].*[A-Za-z].*[A-Za-z])[A-Za-z0-9-]{1,8}$ 

这将匹配包含最多8个数字或字母的任何字符串,最多的出现在字符串中的2个字母。

您可能需要额外的一步才能提取原始文本中的文本。你可以尝试使用这个正则表达式:

Register:(.*) Index 

我们可以尝试使用一个正则表达式的一切,但它会很复杂。从应用程序层使用两个步骤可能会更容易一些。

Demo

+0

@ClasG我更新了我的答案,允许在字母和数字之外加上连字符(除了断言中禁止的内容)。 –

+0

谢谢你的帮助 – Daniel

+0

@Daniel不是问题:-) –

0

我找到了解决办法

  1. 使用注册开始提取文本分隔符

  2. 使用此正则表达式与提取的文本:

    ^(.{1,8}?)(?<![A-Za-z]{3})(|$) 
    
相关问题