[英]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.