Regex - Найдите Содержание отделения идентификатором с вложенными отделениями

Если я использую UTF-8, как с open ('info.json', 'r', encoding = 'utf-8')

, только содержимое Каннада преобразуется в объекты Escape Unicode как \ u0c85 \ u0ca4 \ u0ccd \ u0ca4 \ u0cb2 \ u0cbf \ u0ca4 \ u0ccd \ u0ca4

Нет, это не так.

Содержание каннада правильно интерпретируется как строка Python, содержащая буквы каннада. Проще говоря, в зависимости от того, как вы пытаетесь отобразить строку, отличную от ascii, некоторые символы могут отображаться со своими значениями Unicode, могут исчезать или могут быть заменены другими специальными символами замены.

И Python не делает различий между персонажем и его представлением:

>>> "\x41\x62" == "Ab"
True

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

8
задан ncyankee 13 November 2008 в 13:28
поделиться

4 ответа

В.NET можно сделать это:

(?<text>
(<div\s*?id=(\"|&quot;|&\#34;)content(\"|&quot;|&\#34;).*?>)

  (?>
      .*?</div>
    |
      .*?<div (?>depth)
    |
      .*?</div> (?>-depth)
  )*)
  (?(depth)(?!))
.*?</div>

Необходимо использовать однострочную опцию. Вот пример с помощью консоли:

using System;
using System.Text.RegularExpressions;

namespace Temp
{
    class Program
    {
        static void Main()
        {
            string s = @"
<div id=""firstdiv"">begining content<div id=""content"">some other stuff
  <div id=""otherdiv"">other stuff here</div>
  more stuff
  </div>
</div>";
            Regex r = new Regex(@"(?<text>(<div\s*?id=(\""|&quot;|&\#34;)"
                + @"content(\""|&quot;|&\#34;).*?>)(?>.*?</div>|.*?<div "
                + @"(?>depth)|.*?</div> (?>-depth))*)(?(depth)(?!)).*?</div>",
                RegexOptions.Singleline);
            Console.WriteLine("HTML:\n");
            Console.WriteLine(s);
            Match m = r.Match(s);
            if (m.Success)
            {
                Console.WriteLine("\nCaptured text:\n");
                Console.WriteLine(m.Groups[4]);

            }
            Console.ReadLine();
        }
    }
}
5
ответ дан 5 December 2019 в 14:07
поделиться

Вы просите регулярное выражение, которое может отслеживать количество Тегов Div, вложенных в Теге Div? Я боюсь, что это не возможно с регулярными выражениями.

Вы могли использовать регулярное выражение для получения индекса первого Тега Div, затем цикл по символам в строке, запускающейся в том индексе и проводящей подсчет количества открытых тегов Div. Когда Вы встречаетесь с близким тегом Div, и количество является нулем, затем у Вас есть запуск и конечные индексы в строке, которая содержит подстроку, которую Вы хотите.

5
ответ дан 5 December 2019 в 14:07
поделиться

Cybis говорит истину. Этот вид материала попадает в контекстно-свободные языки, которые более мощны, чем Регулярные языки (вид вещей, покрытых регулярными выражениями). Существует много включенной теории информатики, но позвольте ей покоиться, чтобы сказать, что любой достойный язык будет иметь библиотеку для этого вида материала записанной, который необходимо, вероятно, использовать.

2
ответ дан 5 December 2019 в 14:07
поделиться

Какой язык программирования? Если это - .NET, и Вы уверены, что HTML правильно построен, можно загрузить его в XmlDocument, или XDocument возражают и делают запрос xpath на нем.

0
ответ дан 5 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: