Regex 正则表达式可选匹配
我有一个我自己制作的正则表达式模式(我是一个noob,通过以下教程制作): 我试着匹配以下句子: ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2 二∏ΡΝΜΜΜ∑∑∑ΜΜΜΦ)-Μ∑ΡΚΚ∑∑∑ Ε∑∑∑∑∏∧∧∧ΗΡΡΡΡΡΡΡ(ΑΜΦ)-Β∧∧ΓΝΝΔ∑ 等等 此模式将字符串拆分为4个部分 例如,对于字符串: ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2 第一场比赛是∏ΡΡΡΜΜΛ∑ΚΟ∑ΕΡΜ∑ΑΔΑΚΥΥΥ(受试者姓名) 第二场比赛是:Ε2(班) 第三场比赛是:Ε。Β。Δ。(房间) 第四场比赛是:ΔΗΜΗΡΡΡΥ(老师)Regex 正则表达式可选匹配,regex,Regex,我有一个我自己制作的正则表达式模式(我是一个noob,通过以下教程制作): 我试着匹配以下句子: ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2 二∏ΡΝΜΜΜ∑∑∑ΜΜΜΦ)-Μ∑ΡΚΚ∑∑∑ Ε∑∑∑∑∏∧∧∧ΗΡΡΡΡΡΡΡ(ΑΜΦ)-Β∧∧ΓΝΝΔ∑ 等等 此模式将字符串拆分为4个部分 例如,对于字符串: ΡΡΡΜΜΜ∑ΚΜ∑ΕΑΜ∑цΔΑΔΚΥΕΔ2 第一场比赛是∏ΡΡΡΜΜΛ∑ΚΟ∑ΕΡΜ∑ΑΔΑΚΥΥΥ(受试者姓名) 第二场比赛是:Ε2(班) 第三场比赛是:Ε。Β。Δ。(房间) 第
现在在一些条目中,
E*/Θ
没有定义,我想得到3个不带E*/Θ
的匹配项。我应该如何修改我的模式,使(Ε[0-9\p{希腊语}]+|Θ)
是可选的匹配
到目前为止,我尝试了
?
,但因为在我以前的匹配中,我定义了\s
和\s
,它需要2个空格才能获得3个匹配,而我的字符串中只有一个空格。您可以使用以下内容:
(E[0-9\p{Greek}]+|0)?
整个组都是可选的(?)您可以使用以下内容:
(E[0-9\p{Greek}]+|0)?
整个小组都是可选的(?)我认为你需要做两件事:
- 使
懒惰(即*
)*?
- 将
包含在非捕获可选组中(?:\s(Ε[0-9\p{Greek}]+|Θ))?
^([a-z0-9\p{Greek}].*?)(?:\s(Ε[0-9\p{Greek}]+|Θ))?\s[\(]([a-z1-9\p{Greek}]+.*)[\)]\s-\s([a-z0-9\p{Greek}]+)$
^^ ^^ ^
看
如果您不使第一个*
变懒,它将吃掉第二个可选组。将其设置为惰性将确保,如果第二个捕获组可以匹配某些文本,则该文本将被“设置”
注意,您调用捕获组匹配,这是错误的。匹配是由整个正则表达式匹配的完整文本,而捕获只是由未替换圆括号中的regexp部分匹配的子字符串。有关详细信息,请参见。我认为您需要做两件事:
- 使
懒惰(即*
)*?
- 将
包含在非捕获可选组中(?:\s(Ε[0-9\p{Greek}]+|Θ))?
^([a-z0-9\p{Greek}].*?)(?:\s(Ε[0-9\p{Greek}]+|Θ))?\s[\(]([a-z1-9\p{Greek}]+.*)[\)]\s-\s([a-z0-9\p{Greek}]+)$
^^ ^^ ^
看
如果您不使第一个*
变懒,它将吃掉第二个可选组。将其设置为惰性将确保,如果第二个捕获组可以匹配某些文本,则该文本将被“设置”
注意,您调用捕获组匹配,这是错误的。匹配是由整个正则表达式匹配的完整文本,而捕获只是由未替换圆括号中的regexp部分匹配的子字符串。请参阅。将
设置为(Ε[0-9\p{Greek}]+|Θ)组有什么问题?你能提供一个例子并解释预期的情况吗?看看。按照向组中添加?
标记的相同逻辑,向\s
标记中添加?
,这样这些标记也是可选的?将?
设置为(Ε[0-9\p{Greek}]+|Θ)组有什么错?你能提供一个例子并解释预期的情况吗?看一看。按照向您的组添加?
令牌的相同逻辑,向您的\s
令牌添加?
,以便这些令牌也是可选的?