我正在尝试学习正则表达式,并且我有一些场景我认为我可以使用它。我有一组以下格式的字符串(如表中所示),我需要从中提取连接运算符周围的每个子字符串 "and", < em>“或”,“不”。例如:- "some column name1 = some value1" 作为第一个字符串中的一个这样的子字符串。
之后,我需要提取运算符 "like"、"="、"<"的左侧字符串和右侧字符串em>,“>”。在上面的示例中,它会将 "some column name1" 作为一个子字符串,将 "some value1" 作为另一个子字符串,并将运算符作为 "=".
- some column name1 = some value1 and some column name2 < another value2 or some column name 3 > value3 not column name 4 = value4 and name5 = value5
- columnA = 324324
- columnB like a text
- value text
由于我是 Regex 的新手,这是我迄今为止尝试过的方法,但它似乎并没有为我提供这些运算符的所有值。一旦成功,我想我可以将类似的正则表达式与操作符一起应用,如 "like"、"="、"<"、">" 在生成的子字符串上获取最终输出。
(.*?)\b(and|or|not)
当我在第一个示例中尝试上述正则表达式时,这部分 "name5 = value5" 在匹配后丢失了。
(.+?)(and|or|not)(.+)
当我尝试这个时,它匹配第一个子字符串,但其余子字符串作为单个子字符串匹配,而不是再次拆分它们。
请注意,我能够使用拆分操作并将 "and|or|not" 作为分隔符来获取子字符串数组,但是我正在尝试查看是否可以直接获取这些匹配的子字符串从给定的字符串中学习正则表达式(这 answer 说可以使用正则表达式)。我已经针对类似问题探索了 stackoverflow,但没有一种解决方案适用于我的案例。我使用的语言是 Objective C/Swift。
最佳答案
您可以添加字符串结尾 anchor $
作为分隔符的替代。
(.*?)(?:\b(and|or|not)\b|$)
^^
参见 regex demo .
如果您的字符串包含换行符,您必须通过在模式开头添加 (?s)
(一个 DOTALL 修饰符)来使 .
匹配它们。
关于ios - 正则表达式获取给定单词集之前和之后的所有子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45252477/