1

我正在使用正则表达式从 AutoCAD MTEX​​T(多行)字符串中清除格式控制字符。在 MTEX​​T 字符串的语法中,文字反斜线字符 ( \) 被转义,就像在 Regexp 模式 ie\\中一样,格式控制字符串的示例(在这种情况下更改字体)如下所示:

\fArial Narrow|b0|i0|c0|p18;

我无法用我的 Repexp 模式做的是区分以下内容:

\fArial Narrow|b0|i0|c0|p18;

\\\fArial Narrow|b0|i0|c0|p18;

前者控制格式,而第二个只是以反向固线开头的文字字符串。

正如我在更一般的情况下看到的那样,我需要能够区分以偶数开头的字符串和\奇数开头的字符串。为了说明如下,每一奇数行都包含一个格式化控制字符串,每一偶数行在其整体上都是一个文字字符串:

\fArial Narrow|b0|i0|c0|p18;
\\\fArial Narrow|b0|i0|c0|p18;
\\\\\fArial Narrow|b0|i0|c0|p18;
\\\\\\\fArial Narrow|b0|i0|c0|p18;
\\\\\\\\\fArial Narrow|b0|i0|c0|p18;
...

到目前为止,我对正则表达式模式的最佳尝试是:

(?:\\\\)*\\f[^;]+?\|[^;]+;

但它不起作用,因为第一组可以简单地失败并且它仍然会始终匹配。我的想法是,第一组的所有格量词(?:\\\\)*+, 可以解决这个问题,但当然 vbscript regexp 没有所有格量词。

我很欣赏我正在尝试做的事情可能看起来做作,因为谁将\\fArial Narrow|b0|i0|c0|p18;作为文字字符串输入?但我仍然想知道如何实现这一点。

任何想法我怎么能做到这一点?

4

1 回答 1

2

你的问题是你没有任何东西可以匹配字符串之前的任何东西。如果您将正则表达式(我相信它是正确的)更改为:

(^|\b)(?:\\\\)*\\f[^;]+?\|[^;]+;

你应该得到你需要的比赛;(^|\b)匹配行首或单词边界。显然,如果您知道可能在您的模式之前的任何其他字符,也可以在此处添加它们。

于 2013-09-19T23:19:56.203 回答