我当前的正则表达式通过在第一个连字符之前找到所有内容来工作:
(?<=^)(.*?)(?=-)
。例如,在以下字符串中:
这是我想要的文字 - 不想要的文字 - 更多不想要的文字
它找到“这是我想要的文字”。但是在以下字符串中:
这是我想要的文字 - 不想要的文字 - 更多不想要的文字
它只找到“这就是”。
我想修改我的正则表达式,直到找到第一个“ - ”,包括空格。我也希望连字符可以与“〜”互换。所以我希望找到所有内容,直到第一个“ - ”或“〜”。我尝试将其修改为:
(?<=^)(.*?)(?=(\s-\s|\s~\s))
然而,这是不行的。有谁能指出我正确的方向?
答案 0 :(得分:2)
你为什么要使用后视和前瞻?整个表达式是不必要的复杂,%
是非标准的。
^(.*?)(?: [-~] |$)
会做你想要的。它从行的开头开始,然后匹配所有内容,直到“带空格的连字符或波浪号”或行的结尾。 (?:...)
是一个非捕获组,需要对两个备选方案进行分组。