[英]Split string into sentences using regular expression
我需要將一個像“一。二。三。四。五。六。七。八。九。十一。十一”的字符串匹配成四個句子的組。 我需要一個正則表達式,在每四個句點后將字符串分成一個組。 就像是:
string regex = @"(.*.\s){4}";
System.Text.RegularExpressions.Regex exp = new System.Text.RegularExpressions.Regex(regex);
string result = exp.Replace(toTest, ".\n");
不起作用,因為它將替換句點之前的文本,而不僅僅是句點本身。 我如何只統計句點並用句點和換行符替換它們?
.
正則表達式中的意思是“任何字符”
所以在你的正則表達式中,你已經使用了.*.
這將匹配一個單詞(這相當於.+
)
你可能正在尋找[^.]\\*[.]
- “一系列字符不在.
‘S后跟一個’ .
”。
嘗試定義方法
private string AppendNewLineToMatch(Match match) {
return match.Value + Environment.NewLine;
}
和使用
string result = exp.Replace(toTest, AppendNewLineToMatch);
這應該為每個匹配調用方法,並用該方法的結果替換它。 方法的結果將是匹配的文本和換行符。
編輯:另外,我同意奧利弗。 正確的正則表達式定義應該是:
string regex = @"([^.]*[.]\s*){4}";
另一個編輯:修復了正則表達式,希望這次我把它弄好了。
搜索表達式: @"(?:([^\\.]+?).\\s)(?:([^\\.]+?).\\s)(?:([^\\.]+?).\\s)(?:([^\\.]+?).\\s)"
替換表達式: "$1 $2 $3 $4.\\n"
我在RegexBuddy中運行了這個表達式並選擇了.NET regex,輸出結果為:
one two three four.
five six seven eight.
nine. ten. eleven
我嘗試使用@"(?:([^.]+?).\\s){4}"
排列類型,但捕獲只捕獲最后一次出現(即單詞),所以當涉及到替換時,你將失去4個單詞。如果我錯了,請有人糾正我。
您是否被迫通過正則表達式執行此操作? 分割字符串然后處理數組會不會更容易?
我不確定配置器的答案是否被編輯器破壞了什么,但它不起作用。 正確的模式是
string regex = @"([^.]*[.]){4}\s*";
在這種情況下,似乎正則表達式有點矯枉過正。 我建議使用String.split,然后分解生成的字符串數組。 它應該比試圖使正則表達式做你想要做的更簡單,更可靠。
這樣的東西可能更容易閱讀和調試。
String s = "one. two. three. four. five. six. seven. eight. nine. ten. eleven"
String[] splitString = s.split(".")
List li = new ArrayList(splitString.length/2)
for(int i=0;i<splitString.length;i+=4) {
st = splitString[i]+"."
st += splitString[i+1]+"."
st += splitString[i+2]+"."
st += splitString[i+3]+"."
li.add(st)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.