Nano Hash - криптовалюты, майнинг, программирование

Проверьте, содержат ли две строки один и тот же шаблон

моему приложению понадобится функция сопоставления строк между введенной строкой и строкой, хранящейся в моей БД. Эти строки касаются размеров продукта (например, длины, высоты и т. д.). Моя цель — проверить, существует ли уже введенная строка в моей базе данных, но, возможно, с другим шаблоном, например:

input : "vis 4*40" должен вернуть true, если в моей базе данных есть что-то вроде "vis 4X40", "vis 4 x 40" или "vis 4* 40".

Единственный способ, который я нашел, - это нормализовать мою базу данных с помощью регулярного выражения для замены шаблона, например:

 \d+ *[xX*] *\d+

с нормализованным (например, NumberXNumber), сделайте то же самое со строкой на входе, затем попытайтесь найти ее. Однако мне было интересно, существует ли уже какой-либо инструмент, который позволит мне это сделать. (я работаю на С# .NET V4)

28.11.2012

  • если я правильно понял ваш вопрос.. вы можете проверить входную строку и сохраненную строку с указанным выше regex..если они оба совпадают, то они уже существуют 28.11.2012
  • Я должен был указать больше, но в этом случае это не должно совпадать с событием 4x40 и 4x60, если они соответствуют регулярному выражению. 28.11.2012
  • проверьте мои ответы, что я на самом деле имел в виду 28.11.2012
  • Возможно ли исправить вашу базу данных? разделить эти данные на разные столбцы? 28.11.2012
  • @hometoast технически это возможно, почему? 30.11.2012
  • @WizardLizard, каждый раз, когда вы пытаетесь разбить столбец на разные части в рамках вашей «нормальной» бизнес-логики, это очень хороший показатель того, что вы должны разделить данные на отдельные столбцы. /поля. 30.11.2012
  • @hometoast Я думал об этом в начале, основная проблема в том, что БД загружается пользователями из CSV-файлов, и каждого из них трудно научить разделять поля. Конечно, если я не найду надежного решения, я пойду в этом направлении. 30.11.2012
  • Есть проблема: вы позволяете конечным пользователям кормить БД, казалось бы, без особых проверок между ними. Проанализируйте и проверьте пользовательский ввод перед сохранением, а затем вы сможете прочитать нужные данные и просто отформатировать их для пользователя позже. 30.11.2012

Ответы:


1

Лучшим способом было бы объединить оба данных, а затем сопоставить их.

string target=inputString+"#"+storedString;

if(Regex.IsMatch(target,"(\d+) *[xX*] *(\d+)#\1 *([xX*]) *\2"))
        //the string is in the database
else
       //it is not
28.11.2012
  • Я не согласен, что это лучше. Что делать, если какая-либо из строк содержит символ-разделитель -? Или что, если они будут когда-нибудь в будущем? Это может быть неприятная ошибка. 28.11.2012
  • @DavidPärsson, конечно ... но это не относится только к регулярным выражениям ... даже если вы сделаете это по-другому, изменения будут даже в этом 28.11.2012
  • Дэвид поднимает хороший вопрос, я знаю, что регулярное выражение - сложный инструмент для использования, я собираюсь попробовать ваше решение, которое должно временно заменить мой метод, если появятся какие-либо серьезные проблемы, я дам вам знать и вернусь к моей 1-й идее . Все равно спасибо за ответ :D 28.11.2012
  • @ Some1.Kill.The.DJ: символ-разделитель является проблемой только в том случае, если вы объединяете строки. Вы можете создать аналогичную функцию сопоставления на основе найденных групп без объединения строк. 28.11.2012

  • 2

    Просто используйте предоставленный пользователем подстановочный знак, замените * на % и запросите свою таблицу: SELECT col FROM table WHERE col LIKE 'vis 4%40'

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

    28.11.2012
  • Разве это не соответствует, например, vis 40*40, а также vis 4*40? 28.11.2012
  • Вы правы. Мой настоящий ответ был бы таким: исправить базу данных. 28.11.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..