我想进行正则表达式替换。这是我使用的模式:
.*?fee.*?$|.*?charge.*?$
匹配所需的行
但是,它在咖啡和进纸器上也是匹配的(我想具体说明它与“咖啡”或“饲料”行不匹配,我该如何专门防止这些匹配,但仍能处理诸如费用,收费之类的案件)< / p>
答案 0 :(得分:3)
您可以将alternation与2 word boundaries \b
结合使用,以防止单词成为较大单词的一部分。
对于示例数据,如果要匹配单个或单个或复数版本,可以通过使用问号使结尾的s
为可选。
^.*\b(?:fees?|charges?)\b.*$
^
字符串的开头.*\b
匹配除换行符和单词边界之外的所有字符(?:fees?|charges?)
匹配列出的任何内容,然后匹配可选的s
\b.*
字边界,匹配除换行符0次以上以外的所有字符$
声明字符串的结尾答案 1 :(得分:1)
如果您只是想匹配这两行,则可以简单地使用类似于以下的表达式:
^(fees|charges).+$
如果您希望匹配某些单词,可以将边界添加到类似于this expression的第一组:
^\b(fees|fee|charge|charges)\b(.+)$
如果您的模式可能在字符串输入的中间,则可以在左侧添加另一个组,类似于this expression:
(?:.+|)\b(fees|fee|charge|charges)\b(?:.+|)$
此图显示了这样的表达式如何工作:
如果有真实数据,则可以更轻松地实现正则表达式设计。