我目前正在使用这个 REGEX 来获取带有 PRE_ 前缀的整个单词
\b(PRE_)\S*
这在大多数情况下都可以正常工作,但我想处理特殊字符是单词的一部分的情况,例如句号、逗号或其他特殊字符 . , ; - { } ( ) [ ]
例如这里的文字:
PRE_samplewordwithoutdelimiter
PRE_sampleword.otherwordsnotincluded;
PRE_Sampleword{}...deleted
PRE_complexword()a.;.is deleted
Somewords ahead PRE_sometext() ending in other words
Words with bracket [PRE_brackettext] are deleted
PRE_sampleword is spaced out so deleted
sampleword.PRE_deleted;
notdeleted.notdeleted.PRE_
我只想找到分隔词的第一部分。这样我就可以删除或替换该词。因此,在这种情况下,如果用“”作为文本替换所有 PRE_ 前缀词,我会得到:
<DELETED>
<DELETED>.otherwordsnotincluded;
<DELETED>{}...deleted
<DELETED>()a.;.is deleted
Somewords ahead <DELETED>() ending in other words
Words with bracket [<DELETED>] are deleted
<DELETED> is spaced out so deleted
sampleword.<DELETED>;
notdeleted.notdeleted.<DELETED>
我尝试了不同的 REGEX,但在整个样本中没有一个真正完全正确匹配。类似下面的代码不起作用:
\b(PRE_)\S*(?:[;]|[.][-])$
任何帮助都将不胜感激。
答案1
方法 1
不要\S
在后面包含所有非空格字符(在第一个正则表达式中)PRE_
,只需在搜索中声明所有“非分隔符”即可。
以下内容适用于您的所有示例,通过\S
替换[A-Za-z]
:
\bPRE_[A-Za-z]*
如果您希望包含数字、连字符 ( -
) 和下划线 ( _
),则可以使用以下内容:
\bPRE_[-A-Za-z0-9_]*
方法 2
否则,你可以将你的修改\S
为“除了和其他分隔符之外的任何东西,例如,,,。,,,,(以及\s
任何.
其他你想要的)”这样你的正则表达式就变成了,
;
{
}
(
)
[
]
\bPRE_[^.;,{}()[\]\s]*
这个短语的[^blahblah]
意思是除了 blahblah 之外的任何字符。