正则表达式匹配“AAAA:AAA”模式

时间:2015-07-17 21:04:10

标签: ruby regex

一个字符串必须以3或4个字母(不是数字)开头,并且“:”符号应该跟在这些字母后面,并且在冒号之后还应该有三个字符,例如AAA。例如,AAAA:AAAAAA:AAA

我开始建立这个,但正则表达式给我带来了太大的痛苦,任何人都可以帮助我吗?

以下是我现在所拥有的:

^[a-zA-Z]{3,4}(:)$

2 个答案:

答案 0 :(得分:4)

你的正则表达式几乎就在那里:你需要添加[a-zA-Z]{3}。 我更喜欢[[:alpha:]] POSIX class in Ruby匹配字母。

  

/[[:alpha:]]/ - 字母字符   

POSIX括号表达式也类似于字符类。它们提供了上述的便携式替代方案,具有包含非ASCII字符的额外好处。

所以,这是一个可能的正则表达式:

\A[[:alpha:]]{3,4}:[[:alpha:]]{3}\z

请参阅demo

正则表达式匹配:

  • \A - 字符串的开头(在RoR中,您必须使用\A代替^,否则您将收到错误)
  • [[:alpha:]]{3,4} - 3或4个字母
  • : - 文字:
  • [[:alpha:]]{3} - 3个字母
  • \z - 字符串结尾(在RoR中,您必须使用\z代替$,否则您将收到错误)

要仅允许AAAAAAA,您需要引入一个可选的(?量词)非捕获组((?:...)构造):

\A[[:alpha:]]{3,4}(?::[[:alpha:]]{3})?\z
                  ^^^               ^^      

请参阅another demo

答案 1 :(得分:3)

尝试使用此方法(如果您的方言中的正则表达式必须作为字符串传递,则为引号)

Sub testLoopPaste()

Dim i As Long
Dim LastRow As Long
Dim wb As Workbook
Dim sht1 As Worksheet
Dim sht2 As Worksheet

Set wb = ThisWorkbook
Set sht1 = wb.Sheets("Master")
Set sht2 = wb.Sheets("Audit Sheet")

Application.ScreenUpdating = False

'Find the last row (in column A) with data.
LastRow = sht1.Range("A:A").Find("*", searchdirection:=xlPrevious).Row

'This is the beginning of the loop
For i = 2 To LastRow
    'First activity
    sht2.Range("B1" & ii) = sht1.Range("B" & i).Value
    sht2.Range("B2" & ii) = sht1.Range("A" & i).Value
    sht2.Range("B3" & ii) = sht1.Range("N" & i).Value
    sht2.Range("H1" & ii) = sht1.Range("C" & i).Value
    sht2.Range("H2" & ii) = sht1.Range("I" & i).Value
    sht2.Range("H3" & ii) = sht1.Range("F" & i).Value
    sht2.Range("K1" & ii) = sht1.Range("D" & i).Value

    sht2.PrintOut

Next i

Application.ScreenUpdating = True

End Sub