Поиск строки и извлечение значений размера или количества из строки

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

например, в следующей строке, и мне нужно извлечь количество случаев (1000).

«Кассеты Micromesh II для обработки/встраивания биопсии, 4 отсека, белые — 1000 шт. в коробке»

Мне нужен способ поиска в строке строки «/Case», а затем извлечения предыдущих 4 символов. Я рассматривал использование подстроки и удаление последних 5 символов, но некоторые описания в моей базе данных отличаются, и я не могу этого сделать.

Возможно ли это в VB.NET?


person Standage    schedule 15.09.2011    source источник
comment
Там 1000 случаев, а не 100 :-) :-) Надеюсь, ваш код извлечет точнее :-) :-) :-)   -  person xanatos    schedule 15.09.2011
comment
Будет ли символ / всегда указывать на то, что ему предшествуют числа? Почему нельзя найти отсек 4 из 4?   -  person billinkc    schedule 15.09.2011
comment
Необходимый навык практически для любого программиста: regular-expressions.info   -  person Jay    schedule 15.09.2011
comment
Вы предпочитаете делать все это на стороне базы данных или все в VB.NET? Также какой у вас движок базы данных?   -  person Dave L    schedule 15.09.2011
comment
У меня нет предпочтений, если бы я мог сделать это в базе данных с помощью SQL, это было бы проще. Я использую SQL Server 2008   -  person Standage    schedule 15.09.2011


Ответы (5)


Это должно помочь вам начать работу. Не знаю, какие у вас разделители. Только то, что номер стоит перед /.

Dim s As String = "Micromesh II Biopsy Processing/Embedding Cassettes, 4 Compartment, White - 1000/Case"
Dim idxSlash As Integer = s.LastIndexOf("/")
Dim idxStart As Integer = idxSlash - 1
While Char.IsDigit(s(idxStart))
  idxStart -= 1
End While
Dim result As String = s.Substring(idxStart, idxSlash - idxStart)
person CommonSense    schedule 15.09.2011

Посмотрите на LastIndexOf.

Это даст вам позицию, которую вам нужно использовать с Substring.

Не испытано:

myString = myString.Substring(myString.LastIndexOf("/Case") - 4, 4)
person Oded    schedule 15.09.2011

Используйте регулярные выражения. Это будет работать быстрее

person Gregory Nozik    schedule 15.09.2011

Прежде всего, выясните общий шаблон для названия вашей продукции. а затем напишите Регулярное выражение, которое найдет все ваши цели. то вы можете использовать класс Regex и метод Match в vb.net или С# для их извлечения. он думает, что регулярное выражение - лучший выбор для этого.

person amirhosseinab    schedule 15.09.2011
comment
codinghorror.com/blog/ 2008/06/ - person Oded; 16.09.2011
comment
@Oded - я знаю, что вручную написать идеальное регулярное выражение сложно, поэтому я часто использую инструменты выражения, такие как Expresso - person amirhosseinab; 16.09.2011

@Oded хорош, но ломается, если число не состоит из 4 цифр. Так:

    ' Works as long as number is preceded by space and followed by /
    s.Substring(0, s.LastIndexOf("/")).Substring(s.LastIndexOf(" "))
person egrunin    schedule 15.09.2011