簡體   English   中英

匹配字符串的開頭或結尾 - 但只指定一次模式

[英]Match start or end of string - but only specify pattern once

好的,這主要是一個智力問題(或改進)。

我有一個必須匹配字符串開頭或結尾(或兩者)的模式。

(這里我只是簡單地使用 ' abcd ' 作為模式,但在現實世界中,這是一個相當長且復雜的模式。但這並不有趣,因為它有效)。

像往常一樣,我使用這個正則表達式:

@"^abcd|abcd$"

在這里,模式是重復的,一次用於開始,一次用於字符串結束。

但是,由於模式又長又復雜,我想在 string 中只指定一次 這將有助於閱讀和維護——我只有一個地方可以改變。

以下正則表達式當然不起作用,但可以了解我想要什么:

@"^abcd$" - matches only 'abcd' exact
@"^?abcd$?" - matches also 'abcd' in the middle

所以,問題是:

有沒有辦法匹配字符串的開頭或結尾,並且只指定一次內部模式?

您可以使用

(^)?abcd(?(1)|$)

請參閱正則表達式演示

細節

  • (^)? - 一個可選的捕獲組,如果 position 匹配,則其值為空字符串,否則為 null
  • abcd - 你的價值
  • (?(1)|$) - 一個條件構造:如果第 1 組的值不是 null(如果匹配)則什么也不做,否則匹配字符串的結尾。

請參閱C# 演示

var strings = new List<string> { "1 abcd", "abcd 1", "1 abcd 1"};
var pattern = "(^)?abcd(?(1)|$)";
foreach (var s in strings)
{
    Console.WriteLine("{0} => {1}", s, Regex.IsMatch(s, pattern));
}

Output:

1 abcd => True
abcd 1 => True
1 abcd 1 => False

暫無
暫無

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

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