正则表达式不匹配新行与括号

时间:2018-10-04 10:19:18

标签: ruby regex

我有这段文字:

@Heurtebise (Il ramasse son sac)
Vous regretterez de m'avoir fait du mal.

(Silence.) Vous me chassez ?

@Eurydice
Le mystère est mon ennemi. Je suis décidée à le combattre.

oui oui.

我想要2组2场比赛,我想要的结果是:

Match 1
1.  @Heurtebise (Il ramasse son sac)
2.  Vous regretterez de m'avoir fait du mal.

    (Silence.) Vous me chassez ?

Match 2
1.  @Eurydice
2. Le mystère est mon ennemi. Je suis décidée à le combattre.

   oui oui.

我不明白为什么我的正则表达式/^(\@.+)$([^(\@|\#)]+)/与以括号开头的第四行不匹配。这是我得到的结果:

Match 1
1.  @Heurtebise (Il ramasse son sac)
2.  Vous regretterez de m'avoir fait du mal.

Match 2
1.  @Eurydice
2. Le mystère est mon ennemi. Je suis décidée à le combattre.

   oui oui.

注意如何跳过(Silence.) Vous me chassez ?中的行match 1。不明白为什么!

在此处查看完整案例:http://rubular.com/r/RR2eDc4ZBQ

有人可以帮忙吗?谢谢。

2 个答案:

答案 0 :(得分:3)

错误在字符类中,因此排除了以@#开头的行:

[^(\@|\#)]避免使用@#,但也避免使用(|)。字符类不需要交替和括号。使用[^@#]使您的示例代码对我有用。

答案 1 :(得分:3)

您可以使用

/^(@.+)((?:\R(?![@#]).*)*)$/

请参见regex demo。它将匹配以@开头的任何行,然后匹配不以@#开头的所有连续行。

详细信息

  • ^-一行的开头
  • (@.+)-第1组:@和该行的其余部分
  • ((?:\R(?![@#]).*)*)-第2组:0次或多次出现:
    • \R(?![@#])-不跟@#
    • 的换行符序列
    • .*-该行的其余部分
  • $-行尾(虽然不需要)。