Вместо строки вы можете передать регулярное выражение в String.replace
. В Elixir вы можете построить регулярное выражение с ~r
сигилом .
"[40.45694301152436, -3.6907402812214514]"
|> String.replace(~r'[\[\],]', "")
|> String.split()
|> Enum.map(&String.to_float/1)
Я спрашивал меня этот тот же вопрос и после попытки последовать совету здесь и в другом месте заставить IronPython и BeautifulSoup играть приятно с моим существующим кодом, я решил пойти, ища альтернативное собственное решение для.NET. BeautifulSoup является замечательным битом кода, и сначала не было похоже, что было что-либо сопоставимое, доступное для.NET, но тогда я нашел Пакет Гибкости HTML и если что-либо, я думаю, что на самом деле получил некоторую пригодность для обслуживания по BeautifulSoup. Это берет чистый или неработоспособный HTML и производит изящный XML DOM из него, который может быть запрошен через XPath. С парой строк кода можно даже возвратить необработанный XDocument, и затем разрабатывают запросы в LINQ к XML. Честно, если веб-очистка является Вашей целью, это о самом чистом решении, которое Вы, вероятно, найдете.
Редактирование
Вот простое (чтение: не устойчивый вообще) пример, который анализирует американское праздничное расписание Палаты представителей:
using System;
using System.Collections.Generic;
using HtmlAgilityPack;
namespace GovParsingTest
{
class Program
{
static void Main(string[] args)
{
HtmlWeb hw = new HtmlWeb();
string url = @"http://www.house.gov/house/House_Calendar.shtml";
HtmlDocument doc = hw.Load(url);
HtmlNode docNode = doc.DocumentNode;
HtmlNode div = docNode.SelectSingleNode("//div[@id='primary']");
HtmlNodeCollection tableRows = div.SelectNodes(".//tr");
foreach (HtmlNode row in tableRows)
{
HtmlNodeCollection cells = row.SelectNodes(".//td");
HtmlNode dateNode = cells[0];
HtmlNode eventNode = cells[1];
while (eventNode.HasChildNodes)
{
eventNode = eventNode.FirstChild;
}
Console.WriteLine(dateNode.InnerText);
Console.WriteLine(eventNode.InnerText);
Console.WriteLine();
}
//Console.WriteLine(div.InnerHtml);
Console.ReadKey();
}
}
}
Я протестировал и использовал BeautifulSoup и с IPy 1.1 и с 2.0 (забудьте, какая бета, но это было несколькими месяцами назад). Оставьте комментарий, если Вы все еще испытываете затруднения, и я откопаю свой тестовый код и отправлю его.
Если BeautifulSoup не работает над IronPython, это - потому что IronPython не реализует целый язык Python (тот же способ, которым CPython делает). BeautifulSoup является чистым Python, никакими C-расширениями, таким образом, единственной проблемой является совместимость IronPython с CPython с точки зрения исходного кода Python. Не должен быть один, но если будет, ошибка будет очевидна ("никакой модуль, названный...", "никакой метод не назвал...", и т.д.). Google говорит, что только один из тестов бакалавра наук перестал работать с IronPython., это, вероятно, работает, и что тест может быть зафиксирован к настоящему времени. Я не знал бы.
Испытывают его и видят, был бы мой совет, если у кого-либо нет ничего более конкретного.
Кроме того, относительно одного из предыдущих комментариев о компиляции с-X:SaveAssemblies - который является неправильным.-X:SaveAssemblies предназначен как функция отладки. Существует API, предназначенный для компиляции кода Python в двоичные файлы. Это сообщение объясняет API и различие между этими двумя режимами.
Относительно второй части Вашего вопроса можно использовать API Хостинга ДОЛЛАРА для выполнения кода IronPython из приложения C#. Спецификация хостинга ДОЛЛАРА здесь . Этот блог также содержит некоторые демонстрационные хост-приложения
Мы распределяем 40k строку приложение IronPython. Мы не были в состоянии скомпилировать все это в единственный распространяемый двоичный файл. Вместо этого мы распределяли его как огромное количество крошечных dlls, один для каждого модуля IronPython. Это хорошо работает все же.
Однако на более новом выпуске, IronPython 2.0, у нас есть недавний скачок, который, кажется, в состоянии скомпилировать все в единственный двоичный файл. Это также приводит к более быстрому запуску приложения также (импорт модуля быстрее.), Надо надеяться, этот скачок мигрирует в наше основное дерево в ближайшие дни.
, Чтобы сделать распределение мы используем WiX, который является Microsoft внутренний инструмент для создания msi установки, который был открыто получен (или сделан в свободном доступе, по крайней мере.) Это не дало нам проблем, даже при том, что наша установка имеет некоторые довольно трудные требования. Я определенно посмотрю на использование WiX для распределения других проектов IronPython в будущем.
Я не протестировал его, но я сказал бы, что это будет, скорее всего, работать с последним IPy2.
Что касается распределения, это очень просто. Используйте-X:SaveAssemblies опцию скомпилировать Ваш код Python вниз в двоичный файл и затем поставить его с Вашим другим DLLs и зависимостями IPy.
Если у Вас есть полная стандартная библиотека и реальное re
модуль (Google для выпуска сообщества IronPython), это могло бы работать. Но IronPython является невероятной плохой реализацией Python, я не рассчитывал бы на это.
Кроме того, дают html5lib
попытка. Тот синтаксический анализатор синтаксические анализы с тем же Firefox правил анализирует документы.