2015-01-25 4 views
-3

Я читал wiki и другой предлагаемый материал, но я не могу получить моя голова вокруг создания этого регулярного выражения.Регулярное выражение для удаления знаков препинания, когда оно не является частью слова/значения, поэтому оставляйте%, £, ', но удаляйте, ([*

Чтобы подробно описать это, требуется, поскольку мне нужно разбить предложение на слова и только слова/значения, чтобы я мог сравнивать каждое слово с другими в других предложениях. Это означает случаи, когда его «важно сохранить знак доллара, поскольку десять долларов отличаются от 10, то же самое для процентов и« Тома »с апострофами. С помощью £ $ € # & удалять только тогда, когда не следует пробел, так как & может использоваться в названия компаний, такие как B & Q, и деньги, знак валюты сам по себе не имеет отношения к моим потребностям.

Таким образом, это будет: Удалите все знаки препинания, кроме £ $ € # & + - за исключением пробела и удалите%, если перед ним стоит пробел.

Тогда я буду разбивать пробелы на массив, его просто это проклятое регулярное выражение.

У меня есть регулярное выражение белый список:

Regex.Replace(string, @"[^0-9a-zA-Z\s]+", ""); 

Я просто не могу понять, как указать символ + пробел или пробел + символ, например, чтобы удалить «$», но оставить $, когда его «$ 10» Я знаю, что \ s для какого пространства, но как я прикрепляю к регулярному выражению, которого я не знаю.

+1

Используйте String.split, если вы не знаете, как использовать регулярные выражения. – EZI

+0

Ну, я хочу удалить изначально не split, и с 1 выражением регулярного выражения будет лучше, чем 10 или около того отдельной строки. Мне нужно. Также я бы предпочел не просто согласиться на беспорядочный подход, потому что люди не хотят помогать, его, как этот сайт, не спрашивают о помощи ..... – Vereonix

+1

Если вы даже не можете предоставить нам пример того, как вы попытался выполнить это самостоятельно (по крайней мере, эта часть, удаляющая '%', которой предшествует пробел), мы не можем поверить, что вы действительно что-то пробовали, прежде чем спрашивать. Если вы не хотите дать ему время, вы не можете ожидать, что мы это сделаем. Невозможно заменить '/% /' пустой строкой; или найти диапазон символов, затем сделать «lookahead» для пробела и заменить его снова. Так что идите и попробуйте больше, пожалуйста, сообщите нам, что вы сделали, и тогда мы действительно сможем вам помочь :) –

ответ

1

Вам не нужно Regex, чтобы сделать это:

var newStr = new string(originalStr.Where(c => !",([*\"".Contains(c)).ToArray()); 
+0

А хорошо, не видел этот метод раньше, как указать пробел после символа?Итак, удалите «£» – Vereonix

+0

Добавьте его к символам, которые вы хотите удалить в разделе 'Where':' var newStr = new string (originalStr.Where (c =>! ", ([* \" ". (c)). ToArray()); ' –

+0

Мне жаль, что я не понимаю, добавив пробел после любого символа, который просто удаляет все пробелы из строки, а не только там, где появляется этот символ + пробел. Пример предложения" Этот символ £ должен быть удален, но этот 1 £ 10 не должен « – Vereonix

2

@tom, Конечно, вы можете использовать Regex, это ответ на

Ну, я хочу, чтобы удалить не расщепляется первоначально , и с 1 выражением регулярного выражения будет лучше, чем 10 или около того отдельной строки. Мне нужно. Кроме того, я бы предпочел не просто согласиться на беспорядочный подход, потому что люди не хотят помогать, как этот сайт не для того, чтобы задать вопрос о помощи .....

и как это можно сделать с String.split (я бы этот пост как комментарий, если он будет короче)

var symbols = "£$€#&%+-"; 
var punctuationsChars = Enumerable.Range(char.MinValue, char.MaxValue - char.MinValue) 
          .Select(i => (char)i) 
          .Where(c => char.IsPunctuation(c)) 
          .Except(symbols) 
          .ToArray(); 

string input = "leave £10 remove £ and leave 10% remove % ok"; 

var parts = input.Split(punctuationsChars) 
       .SelectMany(x => x.Split()) 
       .Where(x => !(x.Length == 1 && symbols.Contains(x[0]))) 
       .ToList(); 

Таким образом, вы не должны использовать регулярное выражение Если вы не знаете, как использовать его.

Выход: leave £10 remove and leave 10% remove ok

+0

Я не знаю, насколько я могу это сказать, мне нужно удалить символы, такие как £, $ ТОЛЬКО, если его последует пробел, например: «оставить 10 фунтов удалите £ и оставьте 10% удалить% ok ", должны привести" оставить 10 фунтов стерлингов удалить и уйти 10%, но удалите ok «Я не думаю, что эти условия могут быть указаны, если вы не используете регулярное выражение или длину длиной в милю. Исключите« £ »,« $ »,« & »и т. Д. – Vereonix

+0

@Tom' Мне нужно удалить символы, такие как £, $ ТОЛЬКО, если его следует ПРОСТРАНСТВО. Либо вы не тестировали код, либо понимаете, что я имею в виду. Все, что вам нужно, это просто * где *, чтобы фильтровать, когда ваш символ является единственным символом в найденных строках. – EZI

+0

Yep проверил его, не делает то, что я сказал, нет, где он задает условие, за исключением того, что пробел следует, все, что он делает, это символы списка, которые просто не удаляются. – Vereonix