![](/img/trans.png)
[英]Is there a way to form this regex so that the optional group doesn't end up in the match groups?
[英]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.