2016-02-07 3 views
1

Я хотел бы объединить три моих регулярных выражения, которые очищают текст (пустые строки, начальные и конечные пробелы и т. Д.), Если это возможно, одно регулярное выражение, или если это невозможно - в два.Объединить три регулярных выражения в один (или два)

Мое первое регулярное выражение - [ \t]+. Он делает такую ​​очистку.

first image

Мой второй регулярное выражение ^(?:[\t ]*(?:\r?\n|\r))+ не изображение включено, так как он не будет ничего поймать, если предыдущее регулярное выражение не запускать.

Третье регулярное выражение: ^[\s\xA0]+|[\s\xA0]+$. Он делает такую ​​очистку.

second image

EDIT: Я забыл упомянуть, что в каждом случае я заменить матч ничего "".

EDIT 2: Я использую следующий код в Word:

With selection 
     Dim RegEx As Object 
     Set RegEx = CreateObject("VBScript.RegExp") 
     RegEx.Global = True 
     RegEx.MultiLine = True 
     ' clean selection 
     RegEx.Pattern = "[ \t]+" 
     .Text = RegEx.Replace(.Text, " ") 
     RegEx.Pattern = "^(?:[\t ]*(?:\r?\n|\r))+" 
     .Text = RegEx.Replace(.Text, "") 
     ' the following is from http://stackoverflow.com/a/24049145/2657875 
     RegEx.Pattern = "^[\s\xA0]+|[\s\xA0]+$" 
     .Text = RegEx.Replace(.Text, "") 
End With 
+0

Вы заменяете ту же модель? Также обратите внимание, что '\ s' включает' \ x0A', вам не нужно использовать '[\ s \ xA0]', просто '\ s' достаточно. –

+0

@ WiktorStribiżew Привет снова. Я обновил свой первый пост. – menteith

+0

Таким образом, невозможно использовать только один экземпляр RegExp.Replace. Используйте два: 1) '^ (?: [\ T] * (?: \ R? \ N | \ r)) + | [\ t] +' заменить на 'vbCr' и 2)'^\ s + | \ s + $ 'заменить ничем. Если последнее регулярное выражение не используется с многострочной опцией, попробуйте просто использовать 'Trim()' вместо этого, и вам просто понадобится первое одиночное регулярное выражение. –

ответ

1

Последние регэкспы могут быть объединены в

RegEx.Pattern = "^(?:[\t ]*(?:\r?\n|\r)?)*|[ \t]+$" 

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

0

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

    /([\s\t]{0,50}\r?\n)+|\s+/s 

Регулярное выражение должно хорошо работать на окнах, а также файлы на основе Linux.

+0

Он не работает вообще в Word 2016. – menteith

0

Не про, но я использую несколько регулярных выражений один за другим. Если вы не знакомы с приведенным ниже кодом, чем вы должны попробовать.

Set regEx_ = new regExp 
With regEx_ 
.Global = True 
.MultiLine = True 
.IgnoreCase = True 
.Pattern = "Pattern 1" 
TextLine = regEx_.replace(TextLine, "") 
.Pattern = "Pattern 2" 
TextLine = regEx_.replace(TextLine, "") 
'and so on 
End With 
+0

Это то, что я использую. Но я хотел бы объединить эти регулярные выражения, а не использовать то, что я использовал до сих пор. – menteith

+0

Если вы найдете ответ, поделитесь им, так как он будет полезен и для таких пользователей, как я. – Rahul

+0

Посмотрите решение, которое я обозначил как ответ. – menteith

Смежные вопросы