使用RegEx查找特定单词,即使它已被nonLetter字符分隔

时间:2016-09-01 19:39:57

标签: regex

正则表达式可能不是正确的工具,所以如果这是一个很好的答案。

即使被非字母字符拆分,我也想找一个字。例如,如果我试图找到OneO-ne会匹配,--O__n--e会匹配,但O--nce则不匹配。

避免XY问题:这是为了匹配亵渎过滤器中的单词。出现了这种情况,并且使用String.toLowerString.IndexofString.Replace删除所有非字母,并使用* s替换单词,这是一个相当简单(如果很长)的解决方案然后重建原始字符串。我试图使用正则表达式找到解决方案。这是我到目前为止所尝试的:

(.\*)(([^a-zA-Z]*)(?i)(Y)([^a-zA-Z]*)(?i)(e)([^a-zA-Z]*)(?i)(s)([^a-zA-Z]*)\b)(.\*)

它与I wasn't born --Y_e--s匹配,但不匹配I wasn't born --Y_e--st

所以我在?之后添加\b以使--Y_e--s部分可选(当然,开头(.*)贪婪匹配整个字符串,无论何时何地),改为:

(.\*?)(([^a-zA-Z]*)(?i)(Y)([^a-zA-Z]*)(?i)(e)([^a-zA-Z]*)(?i)(s)([^a-zA-Z]*)\b)?(.\*?)

与任何东西都不匹配。

我很难过。我想要的是:

(Capture Group start of string) (Capture group of my Target word that might be separated by non Letter characters) (Capture Group of End of string).

1 个答案:

答案 0 :(得分:1)

嗯,我不确定你使用哪种正则表达式,但你可以尝试一下。

https://regex101.com/r/qR1aP5/1

(\S)\s*(\S+)(\S)\s*(\S+)(\S)\s*(\S+)

与此文本匹配

I wasn't born --Y_e--s