簡體   English   中英

使用正則表達式從字符串中提取 substring

[英]Extract substring from string with Regex

想象一下,用戶正在多台計算機中插入字符串。

在一台計算機上,配置中的模式將提取該字符串的一些字符,例如 position 4 到 5。在另一台計算機上,提取模式將返回其他字符,例如字符串的最后 3 個位置。

這些配置(Regex 模式)對於每台計算機都是不同的,管理員應該可以更改,而無需更改源代碼。

一些例子:

         Original_String       Return_Value
User1 -  abcd78defg123         78
User2 -  abcd78defg123         78g1
User3 -  mm127788abcd          12
User4 -  123456pp12asd         ppsd

可以用正則表達式完成嗎? 謝謝。

為什么要為此使用正則表達式? 出什么問題了:

string foo = s.Substring(4,2);
string bar = s.Substring(s.Length-3,3);

(您可以將它們包裝起來以輕松地對長度進行一些邊界檢查)

如果你真的想要,你可以把它包裝在一個Func<string,string>放在某個地方 - 不過我不確定我會打擾:

Func<string, string> get4and5 = s => s.Substring(4, 2);
Func<string,string> getLast3 = s => s.Substring(s.Length - 3, 3);
string value = "abcd78defg123";
string foo = getLast3(value);
string bar = get4and5(value);

如果你真的想使用正則表達式:

^...(..)

和:

.*(...)$

我不確定您希望通過使用 RegEx 獲得什么。 RegEx 用於模式匹配。 如果要基於 position 提取,只需使用 substring。

在我看來,Regex 真的不是這里的解決方案。 要返回從 position pos (從 0 開始)且長度為length的字符串部分,您只需調用 Substring function 如下:

string section = str.Substring(pos, length)

分組。 您可以在 /^.{3}(.{2})/ 上進行匹配,然后查看 $1 組。

問題是為什么? 正常的字符串處理,即實際的 substring 方法將更快、更清晰。

要讓正則表達式捕獲值以供進一步使用,您通常使用 (),這取決於正則表達式編譯器它可能是 () 或對於 microsoft MSVC,我認為它是 []

例子

User4 -  123456pp12asd         ppsd  

最有趣的是,這里有 2 個單獨的捕獲區域。 是否有一些關於如何將它們連接在一起的默認規則,或者您是否希望能夠指定如何生成結果?

也許像

r/......(..)...(..)/\1\2/  for ppsd
r/......(..)...(..)/\2-\1/ for sd-pp

你想運行一個正則表達式來獲取捕獲並自己處理它們,還是你想運行更高級的操作命令?

暫無
暫無

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

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