正则表达式匹配组有或没有“ - ”

时间:2017-03-07 19:24:10

标签: regex

我想匹配连字符之前和之后的两组字符串。但是,在某些情况下,连字符也可能丢失。所以我想要的是:

“Hello World - 这是一个测试”:group(1)= Hello World,group(2)=这是一个测试

“Hello World”:group(1)= Hello World,group(2)缺失

我已尝试过以下正则表达式的一些变体,但它无法正常工作。

(.*?)(\-.*)

2 个答案:

答案 0 :(得分:2)

([^-]+?)\s*(?:-\s*(.+))?这样可选择匹配的东西 第二组以连字符开头。

 ( [^-]+? )                    # (1)
 \s* 
 (?:
      - \s* 
      ( .+ )                        # (2)
 )?

答案 1 :(得分:1)

以下正则表达式应该这样做......

([\w\s]+)(?:[\s-]?)(.*?)(?:\n|$)

参见 regex demo / explanation