Regex 用于基本语法格式的正则表达式
我试图用基于一些简单语法概念的正则表达式替换/匹配。时间不早了,我带着通常的自信来到正则表达式网站,相信我可以在一个晚上学会这件事。我大约每六个月做一次。是的,我很傻 不管怎样,万一有人在这个时候(或者确实是在池塘的另一边)接电话,请有人给我一个支持一些简单语法规则的正则表达式:Regex 用于基本语法格式的正则表达式,regex,actionscript-3,grep,Regex,Actionscript 3,Grep,我试图用基于一些简单语法概念的正则表达式替换/匹配。时间不早了,我带着通常的自信来到正则表达式网站,相信我可以在一个晚上学会这件事。我大约每六个月做一次。是的,我很傻 不管怎样,万一有人在这个时候(或者确实是在池塘的另一边)接电话,请有人给我一个支持一些简单语法规则的正则表达式: 逗号(,)句点(.)和单引号(')前面永远不会有一个或多个空格 逗号(,)句点(.)后面总是跟一个空格(不多也不少) 逗号(,)句点(.)和空格()不会重复多次 一对中的第一个双引号(“)后面从不跟一个或多个空格,最
- 逗号(,)句点(.)和单引号(')前面永远不会有一个或多个空格
- 逗号(,)句点(.)后面总是跟一个空格(不多也不少)
- 逗号(,)句点(.)和空格()不会重复多次
- 一对中的第一个双引号(“)后面从不跟一个或多个空格,最后一个双引号后面总是跟一个空格或句点(.)字符
- 最后一个双引号前面不应有任何空格()
// string before
var string:String = '" Hello ,my name is Shennan ,, "he said . ';
string = string.replace(/* your regex magic */, /* replace with */);
trace(string); /* output: "Hello, my name is Shennan," he said. */
这将处理逗号和句点前后的空格:
var pattern:RegExp = / *([,.]) */g;
string.replace(pattern, "$1 ");
这将处理单引号前的空格:
var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
这将处理重复的逗号、句点和单引号:
var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
处理成对引号没有简单的方法,因为,例如,被分成段落的引用材料(如演讲稿)通常会在前面段落中重新打开引号,而不会关闭引号。如果且仅当引号保证均匀成对,则可以使用:
var pattern:RegExp = /" *([^"]*)"/g;
string.replace(pattern, '"$1"');
ActionScript3支持反向引用和负面外观标题,因此上述所有功能都应该可以使用,但无可否认,我还没有对它们进行测试(因为我需要用完)。这将处理逗号和句点前后的空格:
var pattern:RegExp = / *([,.]) */g;
string.replace(pattern, "$1 ");
这将处理单引号前的空格:
var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
这将处理重复的逗号、句点和单引号:
var pattern:RegExp = / *'/g;
string.replace(pattern, "'");
var pattern:RegExp = /([,.'])\1*/g;
string.replace(pattern, "$1");
处理成对引号没有简单的方法,因为,例如,被分成段落的引用材料(如演讲稿)通常会在前面段落中重新打开引号,而不会关闭引号。如果且仅当引号保证均匀成对,则可以使用:
var pattern:RegExp = /" *([^"]*)"/g;
string.replace(pattern, '"$1"');
ActionScript3支持反向引用和负面外观头,因此上述所有功能都应该可以使用,但无可否认,我还没有对它们进行测试(因为我需要用完)。我已经根据您的规则将该过程分解为一系列正则表达式替换。我还没有测试过这些,但与acheong87的答案相比,它们看起来很适合我: -- 规则1:逗号(,)句点(.)和单引号(')前面不能有一个或多个空格。 简单,只需匹配一个或多个空格(
\s+
),后跟逗号、句点或单引号([,.]
)。用括号(()
)捕获逗号、句点或单引号,以便在替换中使用它作为$1
:
var pattern:RegExp = /\s+([.,'])/g;
string.replace(pattern, '$1');
--
规则2:逗号(,)句点(.)后面总是跟一个空格(不多也不少)。
让我们将其分成两个正则表达式。首先,匹配逗号或句点([,]
),后跟一个或多个空格(\s+
),并用一个空格替换这些空格:
var pattern:RegExp = /([.,])\s+)/g;
string.replace(pattern, '$1 ');
然后,匹配逗号或句点,后跟任何非空格的内容(\s
)-在这里,我使用负前瞻进行匹配,但也有其他方法将其替换为逗号或句点,后跟单个空格:
var pattern:RegExp = /([.,])(?!\s)/g;
string.replace(pattern, '$1 ');
--
规则3:逗号(,)句点(.)和空格()的重复次数不得超过一次。
很简单:
var pattern:RegExp = /([,.\s])+/g;
string.replace(pattern, '$1');
--
规则4+5:一对中的第一个双引号(“)后面永远不会跟一个或多个空格,最后一个总是跟一个空格或句点(.)字符。最后一个双引号前面不应有空格()。
正如acheong87所说,这有点棘手。假设您只有成对的引号,可以使用以下规则:
var pattern:RegExp = /"\s*([^"]*)"/g;
string.replace(pattern, '"$1"');
var pattern2:RegExp = /"([^"]*)\s*"(?![.\s])/g;
string.replace(pattern2, '"$1".');
这假设您希望在任何未后跟空格或句点的收盘报价之后添加句点。如果您想在这种情况下使用空格,可以将最后一个参数更改为“$1”
如果您愿意,可以大大简化这些规则。例如,如果首先应用规则3正则表达式,则不需要考虑其他规则中重复的空格。这意味着您不需要规则2中的第一个正则表达式,只需使用第二个正则表达式即可
另外,请参阅acheong87的伟大答案,以获得一些很好的示例。我已经根据您的规则将该过程分解为一系列正则表达式替换。我还没有测试过这些,但与acheong87的答案相比,我觉得它们很合适: -- 规则1:逗号(,)句点(.)和单引号(')前面不能有一个或多个空格。 简单,只需匹配一个或多个空格(
\s+
),后跟逗号、句点或单引号([,.]
)。用括号(()
)捕获逗号、句点或单引号,以便在替换中使用它作为$1
:
var pattern:RegExp = /\s+([.,'])/g;
string.replace(pattern, '$1');
--
规则2:逗号(,)句点(.)后面总是跟一个空格(不多也不少)。
让我们把它分成两个正则表达式。首先,匹配逗号或句点([,.]
),后跟一个或多个空格(\s+
),并用一个空格替换这些空格:
var pattern:RegExp = /([.,])\s+)/g;
string.replace(pattern, '$1 ');
然后,匹配一个逗号或句点,后跟任何不是空格的东西(\s
)-在这里,我用一个否定的前瞻来做这件事,但是还有其他方法,用com替换它