2016-03-25 3 views
0

Я разборе текста, как это:регулярное выражение не получает название улицы

T-SHIRT SIZE 34CM BUSINESS LOCATED: MONTANA 356 

Я сделал это регулярное выражение:

([A-Z]+) (\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d) 

Это соответствует:

SIZE 34 

Но Я хочу, чтобы он соответствовал:

MONTANA 356 

Вы можете мне помочь?

Чтобы быть более явным: я хочу, чтобы избежать совпадения «размер 34», потому что за ним следует символ ... Я хотел бы, чтобы регулярное выражение выполняло соответствия только тогда, когда есть «или» n после того, быть подобранной строкой

+0

Есть ли у вас другие примеры того, что вы хотите поймать, чтобы мы могли обобщить регулярное выражение? Множественное регулярное выражение может ловить 'Montana 356'. – Till

+0

Я отредактирую ... Мой пример неуместен ... – user2348235

ответ

1

Вот модификация, которая должна работать: ([A-Za-z]+) \b(\d{2,5})\b

Вы должны указать, какие символы действительны для имени (я включил прописные и строчные буквы). Я также использую короткую руку, чтобы указать от 2 до 5 цифр.

Критическая часть окружает число с границами слов, \b. Это решение проблемы?

+0

Работает! :) Я нашел, что это регулярное выражение тоже работает: ([AZ] +) (\ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d \ d) \ s Какая разница между совпадениями, которые они выполняют? – user2348235

+0

Разница заключается в первой части 'Regex'. @ Ответ Фильколева соответствует как нижним, так и прописным буквам, а также есть разница в том, как они читаемы. Пример вашего регулярного выражения ужасен. – developer033

1

Можете ли вы попробовать использовать это выражение? ([\w]+)\s(\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d)\b

+0

Работает, но уже выбрал ответ :) – user2348235

+0

В некоторых случаях он терпит неудачу, потому что он использует [\ w] вместо [a-zA-Z]. Например: '123 356 T-SHIRT SIZE 34CM BUSINESS LOCATED' соответствует. – developer033

1

Случается, что я пытаюсь изучить регулярное выражение в VBA Excel. Невозможно ответить, если вы не указали код для своего RegEx. В VBA шаблон соответствует «размеру 34» и «Montana 356». Первая и вторая позиция в массиве MatchCollection. Может быть, вы вернете только первый матч?

'***/update/ Я использую это как тестовую функцию.

Function RegExpTest(patrn As String, strTest As String) As Variant 
Dim regex As New VBScript_RegExp_55.RegExp 
Dim Match As Match, Matches As MatchCollection 
Dim cnt As Integer, cmb() As Variant 
If patrn <> "" Then 
    With regex 
     .Global = True 
     .MultiLine = True 
     .IgnoreCase = True 
     .Pattern = patrn 
    End With 
    If regex.test(strTest) Then 
     Set Matches = regex.Execute(strTest) 
     cnt = Matches.Count 
     ReDim cmb((cnt * 3) - 1) 
     Dim i As Integer: i = 0 
     For Each Match In Matches 
      cmb(i) = " m:" & Match.Value & "," 
      i = i + 1 
      cmb(i) = "i:" & Match.FirstIndex & "," 
      i = i + 1 
      cmb(i) = "c:" & Match.Length & " |" 
      i = i + 1 
'   cmb(i) = "sub:" & Match.SubMatches.Count & "|" 
'   i = i + 1 
     Next 
     RegExpTest = Join(cmb) 
    Else 
     RegExpTest = 0 
    End If 
End If 
Set regex = Nothing 
End Function 
+0

Вопрос решён ... Спасибо за ваш ответ! :) – user2348235

 Смежные вопросы

  • Нет связанных вопросов^_^