Как я могу снять пунктуацию со строки? - PullRequest
63 голосов
/ 07 января 2009

В этой части вопроса "я надеюсь получить ответ в течение 30 секунд" я специально ищу C #

Но в общем случае, как лучше убрать пунктуацию на любом языке?

Я должен добавить: В идеале решения не требуют перечисления всех возможных знаков препинания.

Похожие: Пунктуация в Python

Ответы [ 14 ]

1 голос
/ 14 декабря 2010
$newstr=ereg_replace("[[:punct:]]",'',$oldstr);
1 голос
/ 07 января 2009

Вот немного другой подход с использованием linq. Мне нравится AviewAnew's, но это позволяет избежать Aggregate

        string myStr = "Hello there..';,]';';., Get rid of Punction";

        var s = from ch in myStr
                where !Char.IsPunctuation(ch)
                select ch;

        var bytes = UnicodeEncoding.ASCII.GetBytes(s.ToArray());
        var stringResult = UnicodeEncoding.ASCII.GetString(bytes);
0 голосов
/ 03 сентября 2012

Для длинных струн я использую это:

var normalized = input
                .Where(c => !char.IsPunctuation(c))
                .Aggregate(new StringBuilder(),
                           (current, next) => current.Append(next), sb => sb.ToString());

работает намного лучше, чем использование конкатенации строк (хотя я согласен, что это менее интуитивно понятно).

0 голосов
/ 11 мая 2009
#include<string>
    #include<cctype>
    using namespace std;

    int main(int a, char* b[]){
    string strOne = "H,e.l/l!o W#o@r^l&d!!!";
    int punct_count = 0;

cout<<"before : "<<strOne<<endl;
for(string::size_type ix = 0 ;ix < strOne.size();++ix)   
{   
    if(ispunct(strOne[ix])) 
    {
            ++punct_count;  
            strOne.erase(ix,1); 
            ix--;
    }//if
}
    cout<<"after : "<<strOne<<endl;
                  return 0;
    }//main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...