簡體   English   中英

正則表達式 - 獲取所有未用“/”包裹的單詞

[英]Regex - Get all words that are not wrapped with a "/"

我真的很想學習正則表達式,所以就這樣吧。

我真的很想得到一個字符串中兩邊都沒有“/”的所有單詞。 例如,我需要這樣做:“Hello Great /World/” 我需要得到結果:“Hello” “Great”

這在正則表達式中是否可行,如果可以,我該怎么做? 我想我希望將結果存儲在字符串數組中:)

謝謝

只需使用此正則表達式\b(?<?/)\w+(?!/)\b

var str = "Hello Great /World/ /I/ am great too";
var words = Regex.Matches(str, @"\b(?<!/)\w+(?!/)\b")
    .Cast<Match>()
    .Select(m=>m.Value)
    .ToArray();

這會讓你:

Hello
Great
am
great
too
 var newstr = Regex.Replace("Hello Great /World/", @"/(\w+?)/", "");

如果你真的想要一個字符串數組

var words = Regex.Matches(newstr, @"\w+")
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();

我會先將字符串拆分到數組中,然后過濾出匹配的單詞。 該解決方案也可能比大型正則表達式更清晰,因為您可以更好地發現“單詞”和過濾器的要求。

大的正則表達式解決方案類似於單詞邊界——不是斜杠——許多無空格——不是斜杠——單詞邊界。

我會使用正則表達式替換將所有 /[a-zA-Z]/ 替換為 '' (無)然后獲取所有單詞

試試這個:(單擊此處查看演示

(\s(?<!/)([A-Za-z]+)(?!/))|((?<!/)([A-Za-z]+)(?!/)\s)

使用此示例摘錄:

/character/“_”(下划線/下划線)可以/used/ in /variable/ names /in/ many /programming/ /languages/,而 /character/ “/”(斜杠/筆划/斜線)通常是不允許的。

...此表達式匹配任何前后沒有/字符字母數字、下划線或撇號(英語中“單詞”的典型概念)的字符串 - wrapped with a "/"

\b([\w']+)\b(?<=(?<!/)\1|\1(?!/))

...並且是最純粹的形式,僅使用一個字符 class 來定義“單詞”字符。 它與示例匹配如下:

Matched               Not Matched
-------------         -------------
The                   character
_                     used
underscore            variable
under                 in
strike                programming
can                   languages
be                    character
in                    stroke
names
many
while
the
slash
solidus
is
typically
not
allowed

如果不希望排除/stroke/ ,那么在結束限制中添加一位將允許它,具體取決於您要如何定義“下一個”單詞的開頭:

\b([\w']+)\b(?<=(?<!/)\1|\1(?!/([^\w]))).

(?!/)更改為(?!/([^\w])) ,這允許/something/如果它后面緊跟字母、數字或下划線。 這會將stroke從“不匹配”移動到上面的“匹配”列表。

注意: \w匹配大寫或小寫字母、數字和下划線字符

如果你想從上面改變你對“單詞”的概念,只需將表達式的[\w']部分中包含的字符和速記字符類交換為[a-zA-Z']類的東西以排除數字或[\w'-]包括連字符,這會將under-strike捕獲為單個匹配項,而不是兩個單獨的匹配項:

\b([\w'-]+)\b(?<=(?<!/)\1|\1(?!/([^\w])))

重要的替代品!!! (我認為)

我只是想到了一個替代方法來匹配任何沒有/符號包裹的單詞:簡單地消耗所有這些符號和它們周圍的單詞(拆分)。 這有幾個好處:沒有環視意味着它可以在更多的上下文中使用(JavaScript 不支持環視並且某些正則表達式風格根本不支持環視)同時提高效率; 此外,使用拆分表達式意味着 String 數組的直接結果:

string input = "The /character/ "_" (underscore/under-strike) can be..."; //etc...
string[] resultsArray = Regex.Split(input, @"([^\w'-]+?(/[\w]+/)?)+");

瞧!

暫無
暫無

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

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