Удаление только одного пустого пространства из ячейки - PullRequest
0 голосов
/ 05 мая 2019

Я использую регулярное выражение, чтобы определить один пробел между словами и заменить их подчеркиванием.1. Например, Say F1 имеет значение «название компании, название учреждения».2. Обратите внимание на один пробел между названием компании и названием учреждения.3. Однако два поля разделены несколькими пробелами

Использование приведенного ниже кода для решения этой проблемы.

Sub matchfile2()
Const marker As String = "_"
Dim lrow As Long
Dim rx, s As String, t As String, parts
Set rx = CreateObject("vbscript.regexp")
lrow = Cells(Rows.count, 6).End(xlUp).Row
For A_row = 1 To lrow ' Last row t o consider
    s = Range("F" & A_row)
'     Set s = ActiveSheet.UsedRange

        rx.Pattern = "(\w)+ (?=\w)" 
        rx.Global = True ' find all, not only the first match

        t = rx.Replace(s, "$1_")

Next A_row
End Sub

Однако это приводит к значению Value как "y_name e_f_Institution", которое принимает 1 символперед космосом.Как мы можем изменить код, чтобы получить "company_name Name_of_institution"

Ответы [ 3 ]

1 голос
/ 06 мая 2019

В вашем паттерне вы используете (\w)+.
Я не уверен в деталях, но $1 поддерживает только последний захват для этой группы (последнюю букву).
Попробуйте просто использовать (\w+).Это помещает полное слово в эту группу захвата и заставляет его появиться в $1.

0 голосов
/ 06 мая 2019
    rx.Pattern = "(\w+) (?=\w)" ' match two or more spaces
    rx.Global = True ' find all, not only the first match
    t = rx.Replace(s, "$1_")

Отвечая, для всех, кто ищет подобную ситуацию.

0 голосов
/ 06 мая 2019

Если вы были счастливы держаться подальше от Regex, тогда этот метод должен работать для вас.

Public Sub RetrieveText()
    Dim strText As String, strCompany As String, strInstitution As String

    strText = "Company Name  Name of Institution"

    strCompany = Split(strText, "  ")(0)
    strInstitution = StrReverse(Split(StrReverse(strText), "  ")(0))

    Debug.Print strCompany
    Debug.Print strInstitution

    ' ... or this ...
    strCompany = Trim(Mid(strText, 1, InStr(1, strText, "  ")))
    strInstitution = Trim(Mid(strText, InStr(1, strText, "  ")))

    Debug.Print strCompany
    Debug.Print strInstitution
End Sub

... это еще один вариант, и отчасти упрощает его, по крайней мере, для меня. :-) Regex невероятно мощен, но многим людям трудно понять, и в зависимости от поддержки вашего решения, возможно, стоит подумать.

В любом случае, до вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...