【问题标题】:Convert regex string from Java to Python将正则表达式字符串从 Java 转换为 Python
【发布时间】:2016-12-03 23:10:47
【问题描述】:

我在 Java 中有以下函数可以用空格替换出现的正则表达式:

string.replaceAll("\r?\n[\\s&&[^\r\n]]*", " ")

在 Python 中,相当于:

re.sub("\r?\n[\\s&&[^\r\n]]*", " ", string)

但我刚刚意识到 Python 解析正则表达式字符串的方式与 Java 不同。我的问题是 \r?\n[\\s&&[^\r\n]]* 的 Python 等效正则表达式字符串是什么?

【问题讨论】:

  • 您能否添加一些示例,正则表达式应该和不应该匹配什么?另外,您尝试过正则表达式吗?您是否有证据表明它的行为与 Java 中的不同?
  • Python 有一个很好的文字字符串特性:在字符串前面加上 r - r"\n\r" - 这些被视为文字反斜杠,而不是转义字符。
  • @tobias_k I Java 如果我有String s = "aap\nnoot ",我会得到aap noot 的结果,但在Python 中我会得到aap *newline* noot。因此它的行为不一样。

标签: java python regex python-2.7 python-3.x


【解决方案1】:

在python中是

re.sub(r'\r?\n(?:(?![\r\n])\s)*', " ", stri)

您也可以在 java 中使用相同的正则表达式。

【讨论】:

  • 我不明白这背后的原因,但它有效!谢谢。
  • (?:(?![\r\n])\s)* 将匹配任何空格字符,但不匹配换行符或回车符,零次或多次
  • 对于那些想知道r'somestring' 是“原始”字符串文字的人。在那些中,任何黑斜线都不用于表示特殊字符。这在正则表达式中最常用,因为在 99% 的情况下,您不希望在其中使用那些特殊字符(并且 IMO 使正则表达式字符串更具可读性)
猜你喜欢
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2012-01-28
  • 2022-11-18
  • 2021-10-02
  • 2017-05-15
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多