RegEx - VBA Поиск ячейки разделения с двумя верхними [дубликатами]

В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

2
задан lyk 26 January 2015 в 03:51
поделиться

2 ответа

Чтобы разбить строку с регулярным выражением в VBA:

Public Function SplitRe(Text As String, Pattern As String, Optional IgnoreCase As Boolean) As String()
    Static re As Object

    If re Is Nothing Then
        Set re = CreateObject("VBScript.RegExp")
        re.Global = True
        re.MultiLine = True
    End If

    re.IgnoreCase = IgnoreCase
    re.Pattern = Pattern
    SplitRe = Strings.Split(re.Replace(text, ChrW(-1)), ChrW(-1))
End Function

Пример использования:

Dim v
v = SplitRe("a,b/c;d", "[,;/]")
7
ответ дан Florent B. 25 August 2018 в 15:08
поделиться

Цитирование примера из документации VbScript Regexp: https://msdn.microsoft.com/en-us/library/y27d2s18%28v=vs.84%29.aspx

Function SubMatchTest(inpStr)
    Dim retStr
    Dim oRe, oMatch, oMatches
    Set oRe = New RegExp
    ' Look for an e-mail address (not a perfect RegExp)
    oRe.Pattern = "(\w+)@(\w+)\.(\w+)"
    ' Get the Matches collection
    Set oMatches = oRe.Execute(inpStr)
    ' Get the first item in the Matches collection
    Set oMatch = oMatches(0)
    ' Create the results string.
    ' The Match object is the entire match - dragon@xyzzy.com
    retStr = "Email address is: " & oMatch & vbNewLine
    ' Get the sub-matched parts of the address.
    retStr = retStr & "Email alias is: " & oMatch.SubMatches(0)  ' dragon
    retStr = retStr & vbNewLine
    retStr = retStr & "Organization is: " & oMatch.SubMatches(1)    ' xyzzy
    SubMatchTest = retStr
End Function

Чтобы проверить, звоните:

MsgBox(SubMatchTest("Please send mail to dragon@xyzzy.com. Thanks!"))

Короче говоря, вам нужен ваш паттерн, чтобы он соответствовал различным частям, которые вы хотите извлечь, при этом между spearators, возможно, что-то вроде:

"(\d+)[/-,](\d+)[/-,](\d+)"

Все будет в oMatch, а числа (\ d) будут заканчиваться на oMatch.SubMatches (0) на oMatch.SubMatches (2).

0
ответ дан Oliver 25 August 2018 в 15:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: