2017-09-22 48 views
1

我真的不使用RegEx那麼多。你可以說我是RegEx n00b。我一直在研究這個問題半天。RegEx超過多個字符之前的數字

我想寫一個從數字字符向後看的模式。例如:

1. bob1 => bob 
2. cat3 => cat 
3. Mary34 => Mary 

到目前爲止,我有這個(?![A-Z][a-z]{1,})([A-Za-z_]) 它僅適用於單個字符相匹配,我要的號碼字符前的所有字符。我試圖將^$添加到我的模式中,並使用online simulator。我不確定在哪裏放置^$

注:我使用正則表達式爲.NET Framework

+2

你是否想在數字之前匹配字母? ['\ p {L} +(?= \ d)'](http://regexstorm.net/tester?p=%5cp%7bL%7d%2b%28%3f%3d%5cd%29&i=bob1+% 3D%3E +鮑勃%0D%0acat3 +%3D%3E +貓%0D%0aMary34 +%3D%3E +瑪麗)? –

+1

請您解釋一下:1)這些字符串是獨立的字符串嗎? 2)這裏的規則是什麼,當字符串應該匹配時,爲什麼?展示您的代碼以更好地理解問題。 –

+0

在這裏使用預測有什麼特別的理由嗎?我發現直接比賽通常在大多數情況下效果更好(並且通常更便攜)。 –

回答

0

如果我們打破你的正則表達式,我們可以看到:

(?![A-Z][a-z]{1,})它說「向前看找到一個字符串,它是不是一個大寫字母后跟一個或多個小寫字母「和([A-Za-z_]),它表示」匹配一個字母或下劃線「。這應該最終匹配任何單個小寫字母。

如果我明白你想達到什麼目的,那麼你想要一個數字前的所有字母。我會寫這樣的事情是:

\b([a-zA-Z]+)[0-9] 

這將在單詞邊界\b,匹配一個或多個字母開始,匹配的字符串之後需要一個數字。

(我使用的語法似乎有關.NET正則表達式這個文件匹配:https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions

在Wiktor的Stribizew的評論來看,這裏是一個純粹的匹配正則表達式:

\b[a-zA-Z_]+(?=[0-9]) 

這與模式匹配然後向前看數字。這比我的第一次前瞻嘗試要好。 (謝謝你Wiktor。)

http://www.rexegg.com/regex-lookarounds.html

1

你可以使用像

[\p{L}_]+(?=\d) 

[\w-[\d]]+(?=\d) 

正則表達式見regex demo

圖案的詳細資料

  • [\p{L}_]+ - 任何1個或多個字母(包括低級和大寫)和/或_
    OR
  • [\w-[\d]]+ - 1或多個單詞字符除了數字(字符類內的-[]是一個字符類減法結構)
  • (?=\d) - 一個正向前查找,需要一個數字,立即出現在當前位置的右側
+0

對不起,但這個詞也可以沒有數字。如果沒有一個數字,那麼匹配整個單詞..我會怎麼做呢? –

+0

@PeterSun如果您不需要限制字母組塊的上下文,請刪除前視圖。但是,這不在當前問題的範圍之內。最好提供*精確*提取規則。否則,它會看起來像一個猜謎遊戲,而且我很難猜測我的對話者不知道他們想要什麼。 –

相關問題