Member 12926744 Ответов: 2

Удалите строку, если за ней следует другая строка в C#


Всем Привет,

У меня есть струна ,
str=сорок четыре тысячи сто шестьдесят пять дирхамов и двадцать два Филса

Мне нужно удалить "сто" из строки, если за словом "СТО" следует тысяча, или СТО, или лакх.
Как это сделать.Любая помощь будет очень признательна.

Что я уже пробовал:

if (Regex.IsMatch(str, "Hundred"))
               {
                   // check if it is followed by thousand or Hundred or Lakh
                   //remove it if it is followed by thousand or Hundred or Lakh
               }

2 Ответов

Рейтинг:
8

Perić Željko

Если вам лень изучать регулярное выражение , Вот еще одно не столь элегантное решение :

string Check(string str)
		{
			string s = str.Replace(" ","").Replace("Hundred","*");
			
			string [] s1 = s.Split('*');
			
			if(s1[1].Contains("Thousand") || 
			   s1[1].Contains("Hundred")  || 
			   s1[1].Contains("Lakh"))
			{
				str = str.Replace("Hundred","");
			}
			
			return str;
		}


После проверки строки,
слово сто будет удалено, если за ним последуют слова,
Тысяча, или СТО, или лакх.

Всего наилучшего,
Желько Перич


Рейтинг:
12

OriginalGriff

Если вы имеете в виду "если слово" сто" следует за тысячью или...", как в вашем примере, то попробуйте это:

(?<=(Thousand|Hundred|Lakh)\s+)Hundred
Чтобы удалить это слово:
public static Regex remove = new Regex("(?<=(Thousand|Hundred|Lakh)\\s+)Hundred", RegexOptions.Compiled);
...
string result = remove.Replace(InputText,"");

Если вы хотите играть с регулярными выражениями, получите копию Экспрессо[^] - это бесплатно, и он проверяет и генерирует регулярные выражения.


Member 12926744

Однако я получаю ошибку "слишком много аргументов", давая этот код.

OriginalGriff

Это было очевидно: лишняя тесная скобка.

Pete O'Hanlon

Небольшая поправка, используйте строку.Пустой, а не "".

OriginalGriff

Не коррекция, а просто стилевая точка. Они идентичны, они даже разделяют одну и ту же ссылку:

Console.WriteLine(Object.ReferenceEquals("", string.Empty) ? "Yes" : "No");

всегда будет давать вам "да".
Лично я нахожу "" гораздо более читабельным, чем строка.Пустой

Pete O'Hanlon

Они точно такие же (из-за интернирования), но я предпочитаю использовать строку.Empty over ", чтобы усилить то, что тестирование на пустые строки не должно предполагать или полагаться на то, что это"".

Member 12926744

Спасибо.Это сработало.Еще одна вещь, как устранить лишние пробелы перед словом сто, потому что после удаления слова есть три белых пробела после тысячи.

Graeme_Grant

Я помню, что в прошлом была техническая разница, но не больше. Это объясняет, как: .net - в чем разница между String.Пусто и "" (пустая строка)? - переполнение стека[^]

OriginalGriff

Да ладно тебе! Это не совсем сложно, если вы используете регулярные выражения!
Просто переместите пробел за пределы исключенной группы префиксов...

(?<=(тысяча|сто|лакх))\s+сто