User 13204940 Ответов: 2

Если строка содержится в другой строке


Привет,

У меня есть метод, который анализирует HTML-файлы и заменяет идентификаторы и классы новыми значениями.

Например:
<div class="container padded" id="main_container">Test</div>

Становится
<div class="_0 _1" id="_2">Test</div>

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

Однако я хочу заменить экземпляры только в том случае, если они находятся внутри class="" или id="", а не где-либо еще.

Я бы не хотел, чтобы это случилось.:
<div class="container padded" id="main_container">Test container</div>

становится
<div class="_0 _1" id="main__0">Test _0</div>


Обновление: теперь использую это, но все равно получаю неверный результат.
Dim html As String = "<div class=""container padded"" id=""main_container"">This is a container</div>"
Dim toReplace As String = "container"
Dim replaceWith As String = "_0"
Dim reg As String = "((?:class="")|(?:id=""))(?<Content>" + toReplace + ".*?)(?:"")"

content = Regex.Replace(html, reg, replaceWith)


Производит:
<div _0 id="main_container">This is a container</div>

Должен производить:
<div class="_0 padded" id="main_container">This is a container</div>


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

Регулярное выражение, строка.заменить
---------------------------------

2 Ответов

Рейтинг:
1

OriginalGriff

Поэтому используйте регулярное выражение:

((?:class=")|(?:id="))(?<Content>.*?)(?:")
Должны делать это.


[no name]

Это не сработает на всех регулярных выражений.Заменить("Тест", "((?:класс="")|(?:идентификатор=""))(?:" &амп; "контейнер" и усилитель; ".*?)(?:"")", "_0") производит &ЛТ;_0 див ИД="main_container"и GT;тестирование&ЛТ;/дел&ГТ;

OriginalGriff

Если вы не читаете то, что я печатаю, то я не удивлен.
Бит внутри пары меньше и больше - это имя группы, а не текст для сопоставления.
Без него синтаксис группы будет неправильным, и да - вы получите ошибку!

[no name]

Так как же это должно позволить мне заменить "контейнер" на "_0"?

Я обновил вопрос.

Рейтинг:
0

Richard Deeming

Не пытайтесь анализировать или обновлять HTML с помощью регулярных выражений. Это может только привести к безумию[^]. :)

Используйте библиотеку, чтобы сделать тяжелую работу за вас. Например, AngleSharp[^].