![](/img/trans.png)
[英]Regular Expression to extract words, names, hashtags, and phrases from tweets
[英]Regular Expression - How To Find Words and Quoted Phrases
我想說一串以下內容:
Guiness Harp "Holy Moses"
因此,在C#或VB中獲得以下匹配集:
Guiness
Harp
Holy Moses
本質上,除非空格之間沒有引號,否則它會在空格上分開,然后將引號之間的那些單詞視為單個短語。
謝謝,凱文
如果在帶引號的字符串中沒有任何引號(轉義或雙引號),則可以搜索
"[^"]*"|\S+
但是,引號將成為匹配項的一部分。 如果需要,可以將正則表達式擴展為也處理帶引號的字符串中的引號。
另一種(在這種情況下更好)的可能性是使用csv解析器。
例如(Python):
import csv
reader = csv.reader(open('test.txt'), delimiter=' ', quotechar='"')
for row in reader:
print(row)
這是另一種方法:
string s0 = @"Guiness Harp ""Holy Moses""";
Regex r = new Regex(@"""(?<FIELD>[^""]*)""|(?<FIELD>\S+)");
foreach (Match m in r.Matches(s0))
{
Console.WriteLine(m.Groups["FIELD"].Value);
}
這利用了一個事實,即.NET正則表達式使您可以在同一正則表達式中重用組名。 很少有正則表達式允許這樣做,並且其中只有Perl 6像.NET一樣靈活。
正則表達式無法計數,這使定界符解析變得困難。
我將為此使用解析器而不是正則表達式。
如果這是一個簡單的解析,則可以修剪開始和結束引號。
string text = "Guiness Harp \"Holy Moses\"";
string pattern = @"""[^""]*""|\S+";
MatchCollection matches = Regex.Matches( text, pattern );
foreach( Match match in matches )
{
string value = match.Value.Trim( '"' );
Console.Out.WriteLine( value );
}
但是,此實現不是很靈活。 我只會在內部工具中使用類似的東西。 否則您不介意丟棄代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.