簡體   English   中英

組的可選正則表達式匹配不起作用

[英]Optional regex match for a group doesn't work

我有以下句子

#bb John can #20 jiang stone [voila]

我希望我的C#正則表達式為我的團隊提供5場比賽

#bb
John Can
20
jiang stone
voila

其中#bb和voila位置的標記是可選的。

我使用了以下正則表達式,它在一個沒有第一個#bb的句子中很好地工作 - 例如

John can #20 jiang stone [voila]

給了我4個正確的表達式代幣

@"(.*)#(\d+)(.*\s)(?:\[(.*)\])?"

然而,當我延伸這個時

@"(?:#[a-zA-Z])?(.*)#(\d+)(.*\s)(?:\[(.*)\])?"

它不起作用。 句子開頭的#bb不匹配作為單獨的標記 - 而是我得到一個匹配

b John Can

我嘗試了幾種變體但沒有給我一個可選的匹配到第一個#..匹配。 我想要的是這可以是#{1或2個字符},這可以是可選的。 我可以擁有它,或者它可能會丟失,在這種情況下,其余的應該返回令牌。

我的正則表達式有什么問題?

謝謝你的幫助

這個:

#[a-zA-Z]

表示#后跟單個 ASCII字母。 你要這個:

#[a-zA-Z]{1,2}

為了允許一個或兩個 ASCII字母。

另外,這個:

(?:...)

是指捕獲組。 如果您希望在結果中顯示令牌,則需要將其包裝在捕獲括號中:

(...)

所以,把它放在一起:

@"((?:#[a-zA-Z]{1,2})?)(.*)#(\d+)(.*\s)(?:\[(.*)\])?"

(注意:我不清楚你想要如何處理空格;你可能需要根據需要調整上面的內容。特別注意,如果前兩個標記之間有空格,上面的模式會對待它是第二個令牌的一部分。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM