按“。”拆分字符串,除非在数字

时间:2017-12-06 12:06:59

标签: c# split

我想通过短语分割字符串,并且这样做我正在这样做:

string.Split(new[] { ". ", "? ", "! " }, StringSplitOptions.None);

事情是我的字符串有时会在数字之后捕获,当它有不同的点时,我想在数字之前分开,而不是之后,如果可能的话。

原:

  

Com om processo de agendamentodenãomaisque 60 segundos,嗯   pagamento seguro,garantia de qualidade,Wegho torna-se o meio mais   简单的方便的年龄的服务。   Entenda-se lar como a simbiose perfeita do ativofísico“casa”e do   ativo“emocional”família。 Preparado para ter um parceiro de   excelêncianosserviçosqueprecisa para o seu lar? 1.探索操作系统   nossosserviçosemWegho.om 2. Selecioneoserviçodeque pretende。   Atravésdocódigo邮政verificaremos se estamos presentesnaárea   que pretende 3. Escolha uma hora

结果:

  

Com om processo de agendamentodenãomaisque 60 segundos,嗯   pagamento seguro,garantia de qualidade,Wegho torna-se o meio mais   简单的方便的年龄的服务。

     

Entenda-se lar como a simbiose perfeita do ativofísico“casa”e do   ativo“emocional”família。

     

Preparado para ter um parceiroexcelêncianosserviçosqueprecisa   para o seu lar?

     
      
  1. 探索osnossosserviçosemWegho.om
  2.   
  3. Selecioneoserviçodeque pretende。 Atravésdocódigo邮政verificaremos se estamos presentesnaáreaquepretende
  4.   
  5. Escolha uma hora
  6.   

而且,是否可以保留字符串在字符串中分割的捕获的分隔字符?

2 个答案:

答案 0 :(得分:2)

一种方法是按照当前的方式拆分字符串,然后再次遍历结果列表,将仅限数字的字符串与紧跟其后的字符串重新组合:

var tokens = string.Split(new[] { ". ", "? ", "! " }, StringSplitOptions.None);
var res = new List<string>();
for (int i = 0 ; i < tokens.Length ; i++) {
    var tok = tokens[i];
    int ignore;
    if (i != tokens.Length-1 && int.TryParse(tok, out ignore)) {
        tok += ". "+tokens[++i];
    }
    res.Add(tok);
}

请注意,您的整体方法很脆弱,因为无法判断数字部分是否是&#34;子弹编号&#34;或者没有用户标记来帮助您识别编号的子弹。

答案 1 :(得分:1)

你可以试试正则表达式:

string pattern = @"([^\d][.!?][ ])";
string substitution = @"$1\n\n";
string input = @"Com um processo de agendamento de não mais que 60 segundos, um pagamento seguro, garantia de qualidade, a Wegho torna-se o meio mais simples e conveniente de poder agendar serviços para o seu lar. Entenda-se lar como a simbiose perfeita do ativo físico “casa” e do ativo “emocional” família. Preparado para ter um parceiro de excelência nos serviços que precisa para o seu lar? 1. Explore os nossos serviços em Wegho.om. 2. Selecione o serviço que pretende. Através do código postal verificaremos se estamos presentes na área que pretende. 3. Escolha uma hora";
RegexOptions options = RegexOptions.IgnoreCase;

Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);

检查完整的coderesult

然而,分裂也会在子弹内部起作用。而且你还需要用点来结束你的子弹内容。