我正在尝试学习正则表达式,我想我可以使用相同的场景。我有一组以下格式的字符串(如表所示),我需要从中提取每个子字符串,连接运算符 "和" , "或" , " not" 。例如: - "某些列名称1 =某个值1" 作为第一个字符串中的一个此类子字符串。
之后我需要提取左手边的字符串和右边的字符串操作符"喜欢" ," =" ,"<" ,">" 。在上面的示例中,它将"某些列名称1" 作为一个子字符串而"某些值1" 作为另一个子字符串以及运算符as " =" 。
- 某些列名称1 =某些值1 和 某些列名称2<另一个值2 或 某些列名称3> value3 不 列名4 = value4 和 name5 = value5
- columnA = 324324
- columnB喜欢文字
- 值文字
由于我是Regex的新手,这是我迄今为止所尝试过的,但它似乎并没有给我这些运营商的所有价值。一旦这个工作,我想我可以将类似的正则表达式与运算符一起应用为"喜欢" ," =" ,"<" ,">" 生成的子字符串以获得最终输出。
(.*?)\b(and|or|not)
当我在第一个例子中尝试上述正则表达式时,匹配后缺少此部分" name5 = value5" 。
(.+?)(and|or|not)(.+)
当我尝试这个时,它匹配第一个子字符串,但其余部分匹配为单个子字符串,而不是再次分割它们。
请注意我能够使用拆分操作并将"和|或| not" 作为分隔符来获取子串数组但是我试图看看我是否可以直接从给定的字符串中获取这些匹配的子字符串,仅用于学习正则表达式(此answer表示可以使用Regex)。我已经探讨了类似问题的stackoverflow,但在我的案例中没有一个解决方案。我的语言是Objective C / Swift。
答案 0 :(得分:1)
您可以添加字符串锚$
的结尾作为分隔符的替代。
(.*?)(?:\b(and|or|not)\b|$)
^^
请参阅regex demo。
如果您的字符串包含换行符,则必须通过在模式开始处添加.
,DOTALL修饰符来使(?s)
与它们匹配。