在C#中使用模式匹配的正则表达式问题

时间:2013-12-30 19:53:52

标签: c# regex

我正在使用RegEx.replace方法处理正则表达式,我遇到了一些我的模式不起作用的字符串。

对于字符串,例如:

"Av.Av. Italy"
"Av.  Av. Italy"
"Av. . Av. Italy"

我正在尝试更换Av并删除所有额外的句号和空格,以便我使用这个正则表达式

 rgx = new Regex(@"(Av\.).(Av\.)");
 address = rgx.Replace(address, replacement);

[编辑] 我希望以上所有字符串最终只是说

"Av. Italy"

但它没有改变任何东西。

我还想使用正则表达式获取出现在某些字符串上的随机句点(例如:“word。other word”)和

rgx= new Regex(@"\b\.\b");

但这也没有做任何事......

我使用转义序列错了吗?

2 个答案:

答案 0 :(得分:1)

首先,rgx = new Regex(@"(Av\.*[\s]*)*");对您有用。对于第二个,你必须提供一个例子。

答案 1 :(得分:1)

你可以使用这个正则表达式:

rgx = new Regex(@".*(?:(Av\.)\s*)+");
address = rgx.Replace(address, replacement);

regex101 demo

ideone demo

正则表达式采用任何字符,其中前面有Av.,吃掉所有重复的Av.和空格,并用一个Av.替换那些(加上被吃掉的空格)正则表达式。


对于第二个,也许是那个?

rgx= new Regex(@" \.(?= )");

\b匹配两个单词字符,即\w\W之间,无论它们的顺序如何,\w [a-zA-Z0-9_] \W . \W 1}}正好相反。由于空格和\s都位于\s,因此您不会匹配。然后,我使用了空格而不是Word . Word,因为WordWord匹配换行符,我认为这不是你想要的:)

前瞻是为了防止移除两个空白区域。否则{{1}}将成为{{1}}。