[英]Regex to pick a part of a word
我有這樣的文字:
my text has $1 per Lap to someone.
誰能告訴我如何從中挑選per
部分。 我知道如何選擇$
金額。 就像這樣:
new Regex(@"\$\d+(?:\.\d+)?").Match(s.Comment1).Groups[0].ToString()
任何幫助將受到高度贊賞。
如果您需要在更大的字符串中使用多個子字符串,則可以使用捕獲組。
要獲取per
部分,請使用以下正則表達式並獲取Groups[2].Value
:
var str = "my text has $1 per Lap to someone. ";
var per_str = new Regex(@"(\$\d+(?:\.\d+)?)\s*(\p{L}+)").Match(str).Groups[2].Value;
輸出:
捕獲正則表達式per
被\\p{L}+
地方\\p{L}
捕獲所有Unicode字母(例如ф
, ё
),而不只是拉丁字母。
要獲取數字部分,請使用相同的正則表達式,但抓取Groups[1].Value
:
var num_str = new Regex(@"(\$\d+(?:\.\d+)?)\s*(\p{L}+)").Match(str).Groups[1].Value;
輸出:
另一個提示 :如果您計划在應用程序執行期間多次使用它,請先編譯正則表達式 :
var rx = new Regex(@"(\$\d+(?:\.\d+)?)\s*(\p{L}+)", RegexOptions.Compiled);
var per_str = rx.Match(str).Groups[2].Value;
var num_str = rx.Match(str).Groups[1].Value;
如果你只需要一個$
之后的數字,只需將它后面的開頭圓括號放在正則表達式中: @"\\$(\\d+(?:\\.\\d+)?)\\s*(\\p{L}+)"
。
為了讓所有團體都能參與進來,你可以使用
var groups = rx.Matches(str).Cast<Match>().Select(p => new { num = p.Groups[1].Value, per = p.Groups[2].Value }).ToList();
編輯:
如果你只是想匹配per
號碼后,您可以使用@"(\\$\\d+(?:\\.\\d+)?)\\s*(per)"
或(不區分大小寫) @"(\\$\\d+(?:\\.\\d+)?)\\s*((?i:per\\b))"
正如你所說per
是一個字符串類型,以下簡單的正則表達式可以為你完成這項工作:
\$\d+\s([a-zA-Z]+)
但如果per
包含數字,則可以使用\\w
匹配單詞字符:
\$\d+\s(\w+)
請注意 ,在這種情況下, per
位於第一個捕獲組中,您需要提取第一個組。
如果你不想使用grouping
你也可以使用積極的外觀:
(?<=\$\d+\s)[a-zA-Z]+
如果per
是一個特殊單詞,您可以使用以下正則表達式進行檢查:
(?<=\$\d+\s)per
就像是 :
var per_str = new Regex(@'(?<=\$\d+\s)per').Match(str).Groups[0].Value;
if (per_str != ''){
#dostuff
}
(?<=\$\d+(?:\.\d+)?\s+)\S+
這應該為你做。
正如@Sayse所說,你在這里不需要正則表達式。 我沒有做過兩個解決方案。
檢查演示或閱讀代碼:
public static void Main()
{
var s = "my text has $1 per Lap to someone.";
Console.WriteLine(Test(s));
Console.WriteLine(Test2(s));
}
static object Test(string s)
{
var tab = s.Remove(s.IndexOf(" Lap")) // remove everything after " Lap"
.Substring(s.IndexOf(" $") + 2) // remove everything before " $"
.Split(' ');
return new { Amount = tab[0], Per = tab[1] };
}
static object Test2(string s)
{
var tab = s.Split(' ');
var amount = tab.Single(t => t.StartsWith("$")).Substring(1);
var per = tab[Array.FindIndex(tab, t => t.StartsWith("$")) + 1];
return new { Amount = amount, Per = per };
}
產量
{ Amount = 1, Per = per }
{ Amount = 1, Per = per }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.