2015-11-02 142 views
1

我有我自己(我是小白,虽然,通过下面的教程做的话)这个正则表达式:正则表达式匹配可选

^([a-z0-9\p{Greek}].*)\s(Ε[0-9\p{Greek}]+|Θ)\s[\(]([a-z1-9\p{Greek}]+.*)[\)]\s-\s([a-z0-9\p{Greek}]+$) 

而且我尝试匹配下面的句子:

PROGRAMMATISTIKES实施INTERNET E2(E.V.D.) - DIMITRIOY

编程1的Th(AMF) - MASTOROKOSTAS

计算机导论I(AMF) - VOLOGIANNIDIS

等。

这种模式分割串入4份。

例如,对于字符串:

PROGRAMMATISTIKES实现INTERNET E2(E.V.D.) - DIMITRIOU

第一场比赛是:PROGRAMMATISTIKES实现INTERNET(目标公司名称)

第二场比赛是:E2(类)

第三场比赛是:EB (室)

和第四匹配:DIMITRIOU(教师)


现在在某些条目 E*/Θ没有定义,我想获得3场比赛没有 E*/Θ。我应该如何修改我的模式以便 (Ε[0-9\p{Greek}]+|Θ)是一个可选匹配项?

我试图?到目前为止,而是因为我在以前的比赛我正在定义\s\s它需要2个空格拿到3场比赛我只有一个在我的字符串。

+0

将'?'设置为'(Ε[0-9 \ p {Greek}] + |Θ)'组是什么错误?你能否提供一个例子并解释预期的结果?看看[这个更新的正则表达式](https://regex101.com/r/rL6yA9/2)。 –

+0

通过向你的组添加'?'标记的相同逻辑,向''s'标记添加一个'?',以便这些标记也是可选的? –

回答

2

我认为你需要做两件事情:

  • .*懒(即.*?
  • 附上(?:\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}]+)$ 
        ^^ ^^      ^

demo

如果你不把第一.*懒,它会吃起来是可选的第二组。使其懒惰将确保如果有一些文本可以被第二个捕获组匹配,它将被“设置”。

请注意您致电捕获组匹配,这是错误的。匹配是由整个正则表达式匹配的整个文本,并且捕获只是由包围在未转义的圆括号中的正则表达式部分匹配的子字符串。查看更多关于capture groups at regular-expressions.info

-2

您可以使用类似:

(E[0-9\p{Greek}]+|0)? 

整组将是可选的(?)。

+1

OP已经写了它不起作用。 –