Я думаю, вы могли бы использовать негативный упущение для этого сценария, поскольку запятым, которые вам не интересны, кажется, предшествует число:
$str = @'
CREATE table test ( DISTRICT VARCHAR(3) CHARACTER SET LATIN NOT CASESPECIFIC,
CUSTOMER_ACCOUNT DECIMAL(8,0),
CUSTOMER_SUB_ACCOUNT DECIMAL(3,0),
SERVICE_SEQ_NUM DECIMAL(7,0),
EFFECTIVE_DATE TIMESTAMP(0),
SUBSCRIBER_SEQ_NUM DECIMAL(7,0) )
'@
$str -split '(?<!\d),'
CREATE table test ( DISTRICT VARCHAR(3) CHARACTER SET LATIN NOT CASESPECIFIC
CUSTOMER_ACCOUNT DECIMAL(8,0)
CUSTOMER_SUB_ACCOUNT DECIMAL(3,0)
SERVICE_SEQ_NUM DECIMAL(7,0)
EFFECTIVE_DATE TIMESTAMP(0)
SUBSCRIBER_SEQ_NUM DECIMAL(7,0) )
Обратите внимание, что для этого используется оператор -split
PowerShell 2.0.
Для парного соответствия вы можете попробовать что-то вроде этого:
$re = [regex]@'
(?x)
\(
(?>
[^()]+
|
\( (?<DEPTH>)
|
\) (?<-DEPTH>)
)*
(?(DEPTH)(?!))
\)
'@
if ($str -match $re) {
$matches[0]
}
Выходы:
(
DISTRICT VARCHAR(3) CHARACTER SET LATIN NOT CASESPECIFIC,
CUSTOMER_ACCOUNT DECIMAL(8,0),
CUSTOMER_SUB_ACCOUNT DECIMAL(3,0),
SERVICE_SEQ_NUM DECIMAL(7,0),
EFFECTIVE_DATE TIMESTAMP(0),
SUBSCRIBER_SEQ_NUM DECIMAL(7,0)
)
См. Это сообщение в блоге для получения дополнительной информации о сопоставлении парен .