意外的不对称正则表达式行为\<和\>在R

时间:2015-08-05 13:40:48

标签: regex r

让我用下面的例子来说明。

str = "we are friends"

帮助文档说

  

符号\<和\>匹配开头的空字符串和   一句话结束。

因此,预计会发生以下情况,其中在每个单词的末尾添加一个空格。

gsub("\\>"," ", str)
[1] "we  are  friends "

然而,为什么它在使用

时不起作用
gsub("\\<"," ", str)
[1] " w e  a r e  f r i e n d s"

有人可以解释为什么会这样吗?如果我想在每个单词的前面添加额外的空格,我需要做什么?

1 个答案:

答案 0 :(得分:1)

这很奇怪,但我认为这是documented as a warning

  

gregexprpattern = "\b"的POSIX 1003.2模式无法正常使用重复的字边界(例如perl = TRUE)。使用\\b(?=\\w)进行此类匹配(但对于非ASCII输入可能无法正常工作,因为'word'的含义取决于系统)。

因此,请(?<!\\w)\\b使用perl=Tstr = "we are friends" gsub('(?<!\\w)\\b', ' ', str, perl=T)

[1] " we  are  friends"

请参阅demo

输出:System.Net.NetworkCredential credencials = new System.Net.NetworkCredential(); credencials.UserName = "mail@domain.com"; MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient(); mail.To.Add(email); mail.From = new MailAddress("mail@domain.com"); mail.Subject = subject; mail.IsBodyHtml = true; mail.Body = message; SmtpServer.Host = "smtpserver"; SmtpServer.Port = 25; SmtpServer.Credentials = credencials; SmtpServer.EnableSsl = true; SmtpServer.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; SmtpServer.Send(mail);