使用有序分隔符使用正则表达式解析字符串

时间:2014-12-17 06:29:18

标签: ruby regex string parsing delimiter

我有一个以下格式的字符串:

University/Class (Term)

我需要把它分成三个部分。我想出了/\/|\s\(|\)/g,这对于简单的案例非常有用。不幸的是,这三个部分中的每一个都可以包含这三个分隔符。例如:

University of StackOverflow (online)/Intro to asking questions (Fall2014)

最好的解决方案(不完美,我知道)似乎是编写一个首先查找\/,然后是\s\(,最后是\)的正则表达式。订购。我找到了一些似乎可以提供答案的答案,但在我的案例中,我已经被字符和字符串分隔符混合了。

我一直在努力理解一般的正则表达式,所以我非常感谢一个解释清楚的解决方案。谢谢!

3 个答案:

答案 0 :(得分:2)

\/|\s\((?!.*\/)|\)(?!.*(?:\/|\s\())

试试这个.Split by this。参见演示。

https://regex101.com/r/eZ0yP4/25

或者如果您愿意使用群组,您可以尝试此cn捕获所有ghe群组

(.*)\/(.*)\s\(([^\)]+)

参见演示。

https://regex101.com/r/eZ0yP4/26

答案 1 :(得分:2)

怎么样

> "Universit­y/Class (Term­)".split(/­\s\((?!.*\()­|\)$|\//)
=> ["University", "Class", "Term"]

> "Universit­y of Stack­Overflow (onli­ne)/Intro to askin­g quest­ions (Fall­2014)".spl­it(/\s\((?!.­*\()|\)$|\­//)
=> ["University of StackOverflow (online)", "Intro to asking questions", "Fall2014"]

答案 2 :(得分:2)

我建议使用scan函数而不是split

> "University/Class (Term)".scan(/.+(?=\/)|[^\/].*?(?=\s\()|[^()]+(?=\))/)
=> ["University", "Class", "Term"]
> "University of StackOverflow (online)/Intro to asking questions (Fall2014)".scan(/.+(?=\/)|[^\/].*?(?=\s\()|[^()]+(?=\))/)
=> ["University of StackOverflow (online)", "Intro to asking questions", "Fall2014"]