如何计算并有效地替换字符串中的内部双引号?

时间:2017-01-14 23:33:38

标签: python regex string

我有一个包含大约260万行数据的原始数据文件,并且在每个行中我都有一个表示URL的字符串。不幸的是,其中一些网址中有一个流氓引号:

" www.stackoverflow.com/quest"离子/问"

我现在的方法是计算一行中的引用数量,如果它大于2,只需使用行中的第一个引号和最后一个引号来确定字符串的位置开始和结束。

有没有更有效的方法来解决这个问题?

编辑:

指定URL的字符串不是整行,它只是整行的一部分。整行数据如下,并用空格分隔:

asc755.usask.ca - - [13 / Jul / 1995:17:27:51 -0600]" GET stackoverflow.com/pos"ts/41656163 HTTP / 1.0" 200 2273

所以我实际上无法编辑预期引文中的任何内容,因为预期的引用是任意的。

2 个答案:

答案 0 :(得分:1)

我认为这取决于,有多少网址被破坏了。但你可以跳过计数并替换所有双引号。然后将它们添加回字符串。

s = '"www.stackoverflow.com/quest"ions/ask"'
x = '"%s"' % s.replace('"', '')

答案 1 :(得分:0)

您可能需要使用功能更强大的工具。在没有看到更多输入示例的情况下,我想你可以使用一个简单的正则表达式来清除嵌入字符串中的双引号。用这个来抓住字符串之间的所有内容。

 def registerUser = Action.async { implicit request =>

    RegisterForm.form.bindFromRequest.fold(
      formWithErrors => {
        Future.successful(BadRequest(views.html.register(formWithErrors)))
      },
      formData => {
        registerUserService.registerUser(formData).map{ insertedId =>
          Ok(views.html.index(""))
        }
        .recover {
          case cause => handleRegisterError(cause)
        }
      })


  }

  def handleRegisterError(cause: Throwable)(implicit req: RequestHeader) : Result = {         
    cause match {
      case dae: DataAccessException =>
        //add an error message here
        BadRequest(views.html.register(RegisterForm.form))
      case _ =>
        BadRequest(views.html.register(RegisterForm.form))
    }
  }

然后用空字符串替换^"(.+)"$ 。如果它比这更复杂,请分享有关您正在使用的数据的更多信息。

这是一个工作捕获的链接。 Link