我需要一個正則運算式,它與英語語言串列中的單詞或短語匹配,采用以下形式之一:
- “Some words”
將匹配“ Some words ” - “Some words and some other words”
將匹配“ Some words ”和“ some other words ” - “Some words, more words and some other words”
將匹配“ Some words ”、“ more words ”和“ some other words ” - “Some words, more words, and some other words”
將匹配“ Some words ”、“ more words ”和“ some other words ”
換句話說,正則運算式允許我識別英語短語串列中的每個短語,其中除了最后一個短語(如果有兩個以上的短語)之外的所有短語都用逗號分隔,最后的“and”可能會也可能不會以逗號開頭。
獲取逗號分隔的匹配項很容易:
[^,]
但我不知道如何處理可選的最終“和”分隔符(沒有前面的逗號)。
uj5u.com熱心網友回復:
一種方法是將字串拆分為and(可選地以逗號開頭)或逗號:
string[] inp = new string[] {
"Some words",
"Some words and some other words",
"Some words, more words and some other words",
"Some words, more words, and some other words"
};
foreach (string s in inp) {
string[] phrases = (Regex.Split(s, @"(?:,\s*|\s )and\s |,\s*"));
Console.WriteLine(string.Join("\n", phrases));
}
輸出:
Some words
Some words
some other words
Some words
more words
some other words
Some words
more words
some other words
ideone 上的演示
uj5u.com熱心網友回復:
您可以在中使用以下模式Regex.Split:
\s*(?:(?:,\s*)?\band\s |,\s*)
請參閱正則運算式演示。
詳情:
\s*- 零個或多個空格(?:(?:,\s*)?\band\s |,\s*)- 兩種選擇之一:(?:,\s*)?\band\s- 一個逗號和零個或多個空格的可選序列,然后是一個and帶有一個或多個空格字符的整個單詞|- 或者,\s*- 一個逗號和零個或多個空格。
請參閱 C# 演示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var texts = new List<string> {
"Some words",
"Some words and some other words",
"Some words, more words and some other words",
"Some words, more words, and some other words"
};
var pattern = @"\s*(?:(?:,\s*)?\band\s |,\s*)";
foreach (var text in texts)
{
var result = Regex.Split(text, pattern).Where(x => !String.IsNullOrWhiteSpace(x)).ToList();
Console.WriteLine("'{0}' => ['{1}']", text, string.Join("', '", result));
}
}
}
輸出:
'Some words' => ['Some words']
'Some words and some other words' => ['Some words', 'some other words']
'Some words, more words and some other words' => ['Some words', 'more words', 'some other words']
'Some words, more words, and some other words' => ['Some words', 'more words', 'some other words']
uj5u.com熱心網友回復:
你可以試試
[一些|一些|更多] \s(?:[az] )?\s?words
希望對您有所幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/481383.html
上一篇:使用一個正則運算式查找兩個子字串
下一篇:如何正則運算式匹配此字串組?
