簡體   English   中英

使用正則表達式將字符串拆分為句子

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM