Я новичок в RegeX и нуждаюсь в чем-то, что делает следующее: вход: какое-то слово, которое начинается со всего, следует за чем-то фиксированным как «_CHR», а затем сразу с некоторой цифрой, как 123, а затем что-нибудь остальное. Я хочу найти тех, и заменить это число с представлением символов этого числа ... так, например: вход: «Привет Pi_CHR241to Как вы» будут заменены на «Привет Pinto Как ты»Помощь для регулярного выражения
ответ
С вы только хотите, чтобы заменить _CHRnnn
бит, достаточно для поиска:
_CHR(\d+)
После матча, обратная ссылка номер 1 будет содержать код символа.
При этом, вы можете:
string resultString = null;
resultString = Regex.Replace(subjectString, @"_CHR(\d+)", new MatchEvaluator(ComputeReplacement));
public String ComputeReplacement(Match m) {
return ToString((char)(Int32.Parse(m.Groups[1].Value)));
}
EDIT: Благодаря Алан Муру за его C# опыта и улучшение регулярного выражения идей!
спасибо, как я могу получить номер 2 для exmple после матча? потому что я должен сказать ему заменить его кодом символов этого номера – Bohn
для этой части. Я пробовал это ((char) (Int32.Parse («$ 2»))) и работал, но проблема в том, что он не получает точку останова на ComputeReplacement вообще ... Я думаю, что что-то не так с шаблоном RegEx, который мы используем здесь, – Bohn
Какая точка останова? Вы имеете в виду, что 'ComputeReplacement' вообще не называется? –
Ну, теоретически ваша строка может начинаться или заканчиваться одной из ваших «кодирующих» строк, поэтому я не знаю, что вы хотите беспокоиться о том, что было до или после нее, а просто находить вхождения любого экземпляра этого шаблон.
Предполагая, что вы ищете любой символ юникода, вы можете посмотреть либо до четырех шестнадцатеричных цифр, либо до пяти десятичных цифр. Так что ваш RegEx может выглядеть следующим образом:
HEX:_CHR[0-9A-F]{1,4}
декабря:_CHR[0-9]{1,5}
Если вы хотите, чтобы соответствовать любой формат, попробуйте что-то вроде следующего:
_CHR([0-9A-F]{1,4}|[0-9]{1,5})
Я не думаю, что вы можете сделать замену, которую хотите с RegEx напрямую. RegEx обычно просто выполняет прямую замену, где вы ищете функциональную замену. Но любой язык, который вы кодируете в нем, должен быть достаточно простым, чтобы получить набор совпадений и прокрутить его, разбор и их замену по мере необходимости.
EDIT: Что касается вашего соответствующего вопроса, я не могу дать конкретных подробностей, не зная вашего языка. Но в псевдо-коде, вы могли бы сделать что-то вдоль линий следующее:
Dim pMatches = RegEx.Matches(myInput, myPattern)
Const pfx As String = "_CHAR", ccode As String
For Each m As Match in pMatches
ccode = m.Value.Replace(pfx, "")
myInput.Replace(m.Value, GetUniChar(ccode))
Next
Это примерно синтаксис VB.NET, но вы должны перевести его в зависимости от обстоятельств на любой язык вы используете , Если вам нужно объяснение любого из них, прокомментируйте это.
Да, точно, ищем коэффициенты символов Юникода и заменяя их своими настоящими персонажами ... Я использовал ваш реестр DEC и хорошо работал ... теперь, что дальше? Хорошо, я говорю regEx.IsMatch (reg) ... затем он останавливается где-то, что находит совпадение ... так теперь, как я могу узнать, что было индексом того места, которое соответствовало? сколько еще символов я должен прочитать, и т. д. – Bohn
Обновлен с некоторым кодом, который поможет с совпадением – eidylon
О, на самом деле у Тима Пицкера есть лучший код для обработки матчей, если вы можете заставить его работать. Забыл о функции RegEx.Replace. – eidylon
Проблема с этим методом заключается в том, что если текст, следующий за символом, также является числом, шаблон регулярного выражения может легко принять его для остальной части символа. Вам будет намного лучше использовать стандарт html &#F1;
. Если вы должны использовать метод в примере, вам придется использовать фиксированное количество цифр.
string resultString = null;
resultString = Regex.Replace(subjectString, @"&#([0-9A-Fa-f]+);", new MatchEvaluator(ComputeReplacement));
//alternateive: @"_CHR(\d{3})" - fixed number of digits
//or: @"_CHR(\d+)" - ABSOLUTELY SURE a number will never follow a special character
public string ComputeReplacement(Match m) {
return ((char)(int.Parse(m.Groups[1].Value, NumberStyles.HexNumber))).ToString();
}
- 1. asp.net регулярного выражения помощь
- 2. регулярного выражения помощь
- 3. Flex Регулярного выражения необходима помощь
- 4. Помощь в создании регулярного выражения
- 5. Требуется помощь расшифровки регулярного выражения
- 6. Нужна помощь для этого регулярного выражения
- 7. Нужна помощь для построения регулярного выражения
- 8. Помощь регулярного выражения или альтернатива
- 9. Помощь регулярного выражения с образцом образца. C#
- 10. Нужна помощь в формировании регулярного выражения -xml
- 11. Нужна помощь в улучшении моего регулярного выражения
- 12. JQuery матч регулярного выражения помощь (необязательное условие)
- 13. Нужна помощь при написании условного регулярного выражения
- 14. Нужна помощь в создании регулярного выражения
- 15. Нужна помощь в создании регулярного выражения
- 16. Нужна помощь в написании регулярного выражения
- 17. Нужна помощь при создании регулярного выражения (NSClient ++)
- 18. Помощь регулярного выражения в контексте команды locate
- 19. помощь по настройке регулярного выражения в perl
- 20. Помощь упрощая этот шаблон регулярного выражения
- 21. Нужна помощь в соответствии регулярного выражения
- 22. Помощь регулярного выражения - добавление аргумента в функцию
- 23. Помощь регулярного выражения - суммируйте числа в строке?
- 24. Нужна помощь при написании шаблона регулярного выражения
- 25. Нужна помощь относительно регулярного выражения в TCL
- 26. Помощь Сокращение регулярного выражения с повторными подшаблонами
- 27. помощь регулярного выражения, только один дефис подряд?
- 28. Нужна помощь по пояснению регулярного выражения javascript
- 29. Нужна помощь при написании регулярного выражения
- 30. Нужна помощь для регулярного выражения для величины процентов
Я бы предложил использовать обычный синтаксис HTML для этого: '&__;'. – orlp
Это выглядит подозрительно, как обход проблемы с кодировкой. –