Я знаю, что это очень-очень старый вопрос, и ответ также был принят. Но все же я хотел бы представить очень простой ответ на оригинальный вопрос. Рассмотрим этот код:
String str = "Hello-World:How\nAre You&doing";
inputs = str.split("(?!^)\\b");
for (int i=0; i<inputs.length; i++) {
System.out.println("a[" + i + "] = \"" + inputs[i] + '"');
}
OUTPUT:
a[0] = "Hello"
a[1] = "-"
a[2] = "World"
a[3] = ":"
a[4] = "How"
a[5] = "
"
a[6] = "Are"
a[7] = " "
a[8] = "You"
a[9] = "&"
a[10] = "doing"
Я использую только границу слова \b
, чтобы разграничить слова , кроме , когда это начало текста.
Нечто подобное должно работать. Вы использовали блок With
для кода, но фактически не использовали его. Вам не нужны дополнительные ссылки на тот же объект. В этом я проверил, пуста ли ячейка, если не использовать
Sub DelRows()
Const cSheet As Variant = 1 ' Worksheet Name/Index
Const cFirst As Long = 1 ' First Row Number
Const cColumn As Variant = "C" ' Criteria Column Letter/Number
Dim rngU As Range ' Union Range
Dim LastUR As Long ' Last Used Row
Dim r As Long ' Row Counter
With ThisWorkbook.Worksheets(cSheet)
' Check if worksheet is empty.
If .Cells.Find("*", .Cells(.Rows.Count, .Columns.Count), -4123, , 1) _
Is Nothing Then Exit Sub
' Calculate Last Used Row.
LastUR = .Cells.Find("*", , , , , 2).Row
' Add found criteria first (can be any) column cells to Union Range.
For r = cFirst To LastUR ' Rows
If IsEmpty(.Cells(r, cColumn)) Then
If Not rngU Is Nothing Then
Set rngU = Union(rngU, .Cells(r, 1))
Else
Set rngU = .Cells(r, 1)
End If
End If
Next
End With
' Delete rows in one go.
If Not rngU Is Nothing Then
rngU.EntireRow.Delete ' .Hidden = True
Set rngU = Nothing
End If
End Sub