Regex, чтобы выяснить сложную строку - PullRequest
1 голос
/ 17 сентября 2010

Я пытаюсь проанализировать некоторые текстовые файлы в базе данных, и есть строка, которая включает в себя 2 фрагмента информации.Есть несколько вариантов того, как может выглядеть строка.Он может выглядеть как одно слово Word или иметь первое слово, за которым следует тире, а затем любое количество других слов, например Word - Second.Ключевым моментом является то, что если строка оканчивается числом типа Word - Second 4 или двумя числами, разделенными косой чертой, например Word - Second 2/3, то эти числа необходимо поместить в другую переменную.

Я НЕ знаюдостаточно о регулярных выражениях, чтобы сделать это.Помогите?(с объяснениями?)

1 Ответ

2 голосов
/ 17 сентября 2010

Я думаю, вы можете искать что-то вроде этого:

^([a-zA-Z]+(?: *- *[a-zA-Z]+(?: +[a-zA-Z]+)*)?)(?: +(\d+(?:\/\d+)?))?$

Пояснение:

^               Start of line
(               First capturing group (for the words)
  [a-zA-Z]+     A word
  (?:...)?      (Omitted for clarity)
)               Close first group
(?:             Start non-capturing group
  \s+           Some whitespace
  (             Second capturing group (for the numbers)
    \d+         A number
    (?:\/\d+)?  Optionally a slash followed by another number
  )             Close capturing group
)?              Close optional non-capturing group
$               End of line

Я опустил объяснение этой части выше: (?: *- *[a-zA-Z]+(?: +[a-zA-Z]+)*)?. Он соответствует тире, за которым следуют одно или несколько слов, разделенных пробелом. Я также написал \s в объяснении вместо , потому что пространство невидимо. Но \s соответствует любому пробелу, включая новые строки. Вы можете предпочесть совпадение только с пробелами.

Rubular

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...