1

我想从字符串的每一行中获得 3 个匹配项:

m&tch1@ match2@  match3canbe&ny7hing
match2@          match3canbe&ny7hing
  • 匹配 1 可以是任何非空格,它并不总是以 @ 结尾
  • 如果 Match 1 存在,则与 Match 2 用空格隔开(空格不是匹配的一部分)
  • 匹配 2 始终是一个普通单词,并且始终以 @ 结尾
  • 第3场比赛是什么

所以从上面,我想要:

Match 1
1.  m&tch1@
2.  match2
3.  match3canbe&ny7hing
Match 2
1.  
2.  match2
3.  match3canbe&ny7hing

我想出了这个:/^(\S*@?) ?(\w+)@ +(.+)/但它返回:

Match 1
1.  m&tch1@
2.  match2
3.  match3canbe&ny7hing
Match 2
1.  match
2.  2
3.  match3canbe&ny7hing

匹配 1 很好,但对于匹配 2,第一组应该是空的,第二组应该是 'match2'

如果不能单独使用正则表达式,还有其他建议吗?

UPD: sawa 的解决方案有效,但如果我在行前加上任何东西,例如选项卡:

prefix m&tch1: match2: match3canbe&ny7hing
prefix match2: match3canbe&ny7hing

并像这样扫描它:/^prefix (\S*)\s+(\S*):\s+(\S+)/ 它只扫描一行

当前:http
://rubular.com/r/expKw59fF2 带前缀(尚未工作):http ://rubular.com/r/VWGgU1qNWA

4

1 回答 1

1
string.scan(/(\S*)\s+(\S*)@\s+(\S+)/)

返回:

[
  [
    "m&tch1@",
    "match2",
    "match3canbe&ny7hing"
  ],
  [
    "",
    "match2",
    "match3canbe&ny7hing"
  ]
]
于 2013-02-23T22:51:47.717 回答