Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Регулярные вырожения Добавлено: 08.07.10 17:06  

Автор вопроса:  goodwen
Здравствуйте, у меня в textbox вводится строка, она должна разделятся по знакам препинания и союзам, как я понимаю обычная Функция Split тут не подходит, поскольку это очень муторно. И строка должна разделятся с помощью регулярных выражений.
 То есть вводится строка, которая должна разделится с помощью вот таких символов ".", ",", "И" (точка, запятая, союз и), как это сделать процедурно? Напишите программный код, если можно.

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 08.07.10 19:04
Регулярное выражение вроде
  1. [^.,и]*

Ответить

Номер ответа: 2
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #2 Добавлено: 08.07.10 23:08
Artyom, А как с помощью вот этого записать, чтобы введённая строка в textbox разделялась на части с помощью этих знаков?

Ответить

Номер ответа: 3
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #3 Добавлено: 08.07.10 23:20
Если речь о дотнете. То пригодиться охаянная выше функция Split которой можно передавать в качестве разделителя массив символов.
  1. string s = "Типа, моя строчка и ващще. Да!";
  2.             string[] c = new string[3];
  3.             c[0]=".";
  4.             c[1] = ",";
  5.             c[2]=" и ";
  6.             string[] newS = s.Split(c, StringSplitOptions.None);

Правда, появиться немного геморроя с пробелами, но это вполне решаемо.

Ответить

Номер ответа: 4
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #4 Добавлено: 08.07.10 23:51
s12, у меня VB6, а как на нём можно записать?

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 09.07.10 00:01
  1. s.Split(new string[] {".", ",", " и "}, StringSplitOptions.None);

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 09.07.10 15:09
goodwen, самый простой и тупой способ - привести все разделители к одному. Потом рассплитить
s = replace$(s, ".", ",";)
s = Replace(s, " и ", ",", , , vbTextCompare)
arr = split(s, ",";)

Ответить

Номер ответа: 7
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #7 Добавлено: 09.07.10 16:07
Winand, сделал, как Вы показали:
  1.  
  2. Dim a, arr
  3. Private Sub Command1_Click()
  4. a = Label1.Caption
  5. a = Replace$(a, ".", ",")
  6. a = Replace(a, "и", ",", , , vbTextCompare)
  7. arr = Split(a, ",")
  8. For i = LBound(arr) To UBound(arr) - 1
  9. MsgBox arr(i)
  10. Next i
  11. End Sub
  12. Private Sub Form_Load()
  13. Label1.Caption = "Петя пошёл в школу, что бы всё было хорошо и он так знал."
  14. End Sub


И делит вот так:
1. "Петя пошёл в школу"
2. "что бы всё было хорошо"
3. "он так знал"
А как сделать, что бы союз "и" оставался в последней части? И делилось вот так:
1. "Петя пошёл в школу"
2. "что бы всё было хорошо"
3. "и он так знал"

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 09.07.10 22:17
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.     Dim a As String, arr() As String, i As Long
  5.     a = "Петя пошёл в школу, что бы всё было хорошо и он так знал."
  6.     a = Replace$(a, ".", ",")
  7.     a = Replace(a, " и ", ",и ", , , vbTextCompare)
  8.     arr = Split(a, ",")
  9.     For i = 0 To UBound(arr)
  10.         arr(i) = Trim$(arr(i)) 'убрать пробелы с обоих концов строк
  11.     Next i
  12.     For i = 0 To UBound(arr)
  13.         If LenB(arr(i)) > 0 Then _
  14.             MsgBox arr(i)
  15.     Next i
  16. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #9 Добавлено: 09.07.10 23:12
Winand, спасибо заработало, но если добавляю новые знаки, то не работает, как мне корректно добавить новые знаки? например ":" и союз "или".

Ответить

Номер ответа: 10
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #10
Добавлено: 09.07.10 23:26
ну также
a = Replace$(a, ":", ",";)

Ответить

Номер ответа: 11
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #11 Добавлено: 10.07.10 16:23
Winand, там немного по другому, я должен добавить ещё знаки к уже внесённым, то есть не только точка, запятая и союз "и", но и все остальные союзы и знаки препинания, и я добавляю новые, а мне пишет, что несоответствие типов.

Ответить

Номер ответа: 12
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #12
Добавлено: 10.07.10 17:01
Проще всего использовать Masked Edit. В окне Controls.

Ответить

Номер ответа: 13
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #13 Добавлено: 11.07.10 12:11
Ilya, у меня он не выполняется, пишет ошибку и вылетает. А как мне в этот код добавить союзы и знаки препинания?

Ответить

Номер ответа: 14
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #14 Добавлено: 12.07.10 23:39
вот мое творение )

  1.  
  2. Option Explicit
  3. Private Const splitting_chars As String = "|splitting_chars|"
  4.  
  5. Private Sub Form_Load()
  6. Dim sArray() As String, sString As String, sTemp As String, lCount As Long
  7.  
  8. sArray = Split("Петя пошёл в школу, что бы всё было хорошо и он так знал.")
  9. For lCount = 0 To UBound(sArray)
  10.   Select Case sArray(lCount)
  11.     Case "и"
  12.       sArray(lCount) = splitting_chars & sArray(lCount)
  13.     Case "и,"
  14.       sArray(lCount) = splitting_chars & Left$(sArray(lCount), 1)
  15.     Case ",и"
  16.       sArray(lCount) = splitting_chars & Right$(sArray(lCount), 1)
  17.     Case Else
  18.       sTemp = Right$(sArray(lCount), 1)
  19.       If sTemp = "." Or sTemp = "," Or sTemp = ":" Or sTemp = ";" Then
  20.         sArray(lCount) = Left$(sArray(lCount), Len(sArray(lCount)) - 1) & splitting_chars
  21.       End If
  22.   End Select
  23. 'MsgBox sArray(lCount)
  24. Next lCount
  25.  
  26. sString = Join$(sArray)
  27. If InStr(1, sString, splitting_chars) > 0 Then sString = Left$(sString, Len(sString) - 17)
  28. 'MsgBox sString
  29. sArray = Split(sString, splitting_chars)
  30.  
  31.  
  32. For lCount = 0 To UBound(sArray)
  33.   MsgBox sArray(lCount)
  34. Next lCount
  35. End Sub

Ответить

Номер ответа: 15
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #15 Добавлено: 12.07.10 23:45
блин нашел косяк
на 27 строке заменить на это
  1.  
  2. If InStr(Len(sString) - 17, sString, splitting_chars) > 0 Then sString = Left$(sString, Len(sString) - 17)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам