Что нового

[RegExp] Замена по условию

Крепыш

Новичок
Сообщения
105
Репутация
2
Помогите написать регулярку. Задача: есть строка вида '^(D|\d{1,2}),<...>' Надо заменить на: '<тут_условие>,<...>'
где <тут_условие>:
1) если в найденом буква 'D', то на слово 'Day'
2) если цифры, то оставить цифры

Пример:
'D,совпадение' заменяем на 'Day,замена'
'5,совпадение' заменяем на '5,замена'
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Крепыш
приведи пример строки и что на что менять, а то на такие "примеры" воображение не срабатывает
можно использовать
Код:
StringInStr
 
Автор
К

Крепыш

Новичок
Сообщения
105
Репутация
2
joiner сказал(а):
можно использовать
Код:
StringInStr
Ну до этого я сам догадался. Но хотелось бы сделать это одним регулярным выражением.

joiner сказал(а):
приведи пример строки и что на что менять, а то на такие "примеры" воображение не срабатывает
Ок. В два действия это будет выглядеть так:
Код:
$sText = 'D,1230'
If StringRegExp($sText, '^D,(\d{3})') Then
  $sText = StringRegExpReplace($sText, '^(D),(\d{3})0', 'Day,$2')
Else
  $sText = StringRegExpReplace($sText, '^(\d{1,2}),(\d{3})0', '$1,$2')
EndIf
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Крепыш [?]
В одно.
Код:
ConsoleWrite(StringRegExpReplace('D,1230', 'D,(\d+)', 'Day,$1'))
;или так
ConsoleWrite(StringRegExpReplace('D,1230', 'D,(?=\d+)', 'Day,$1'))
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Крепыш
Вы пробовали пример?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
С использованием
Код:
StringRegExpReplace

IMHO не получится.

Код:
$sData = ''
$aData = StringRegExp('D,1230 5,1230  C,1230 7,1230  ', '(D|\d)?,(?(1)(\d{0,3})0|%#%)', 3)

For $i = 1 To UBound($aData)-1 Step 2
	If Mod($i, 2) And $aData[$i-1] = 'D' Then
		$aData[$i-1] = 'Day'
	EndIf
	$sData &= StringFormat('%s,%s\n', $aData[$i-1], $aData[$i])
Next
ConsoleWrite($sData)
 
Верх