我有一个以下格式的字符串:
University/Class (Term)
我需要把它分成三个部分。我想出了/\/|\s\(|\)/g
,这对于简单的案例非常有用。不幸的是,这三个部分中的每一个都可以包含这三个分隔符。例如:
University of StackOverflow (online)/Intro to asking questions (Fall2014)
最好的解决方案(不完美,我知道)似乎是编写一个首先查找\/
,然后是\s\(
,最后是\)
的正则表达式。订购。我找到了一些似乎可以提供答案的答案,但在我的案例中,我已经被字符和字符串分隔符混合了。
我一直在努力理解一般的正则表达式,所以我非常感谢一个解释清楚的解决方案。谢谢!
答案 0 :(得分:2)
\/|\s\((?!.*\/)|\)(?!.*(?:\/|\s\())
试试这个.Split by this。参见演示。
https://regex101.com/r/eZ0yP4/25
或者如果您愿意使用群组,您可以尝试此cn捕获所有ghe群组
(.*)\/(.*)\s\(([^\)]+)
参见演示。
答案 1 :(得分:2)
怎么样
> "University/Class (Term)".split(/\s\((?!.*\()|\)$|\//)
=> ["University", "Class", "Term"]
> "University of StackOverflow (online)/Intro to asking questions (Fall2014)".split(/\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"]