【问题标题】:Using a regexp to match my string content?使用正则表达式匹配我的字符串内容?
【发布时间】:2012-05-17 05:16:58
【问题描述】:

我认为我应该使用正则表达式来匹配文件中的内容。

我想替换 w=<DIGIT> 的所有序列,例如我想要达到的目标很多

s.replace('w=99923123','')
s.replace('w=23123','')
s.replace('w=123','')

所以我想知道您是否可以建议一个与我的表达式匹配的正则表达式?

更新

我尝试了显而易见的方法,它似乎有效

>>> import re
>>> s='m=2&w=3'
>>> s=re.sub('w=\d', '', s)
>>> s
'm=2&'

【问题讨论】:

  • 我现在已经尝试了显而易见的s=re.sub('w=\d', '', s) 谢谢你说我应该这样做
  • 不过,它只匹配一个数字。检查安蒂的答案。
  • s='m=2&w=32'呢?
  • 像 'w=\d+' 一样在末尾添加 '+'
  • 感谢所有帮助。捕获一次 w= 就足够了。我实际上正在使用它将基于数字 ID 的 url 重定向到基于名称的友好 url,即 //?所以我使用这个正则表达式进行重定向。

标签: python regex python-2.7


【解决方案1】:
import re
pat = re.compile('w=[0-9]+')  # or you can use \d+
s = pat.sub('', s)

更新

然后你需要注意,如果这是一个更复杂的,我的正则表达式也匹配 tw=123, 和 tw=123a456,但不做你想做的事。相反,也许你根本不应该使用正则表达式(如果你有问题,然后使用正则表达式,你现在有两个问题,他们说)。 你可以试试这个:

import urlparse
import urllib

s = 'w=123&q=456&tw=123&w=123abc&foo=bar&w=12'

# s here must be key=value&key=value only
parsed = urlparse.parse_qsl(s, keep_blank_values=True)
filtered = [ i for i in parsed if not (i[0] == 'w' and i[1].isdigit()) ]
s = urllib.urlencode(filtered)

值得注意的是,它只删除那些值仅由数字组成的 w=value 对。

【讨论】:

  • 谢谢。我接受这两种解决方案,因为字符串中只会出现一次 w=digit。我使用它来将基于 id 的查询字符串的 url 重定向到更易读的 url,即 //?然后我传递查询字符串的其余部分。我认为这是清理凌乱的 url 以将参数排列到目录分组中的好方法,其中 everi w=digit 成为唯一的 // ,当然这对于两个具有相同名称的区域不起作用。
猜你喜欢
  • 2020-03-21
  • 2011-09-15
  • 2015-09-30
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 2012-06-05
相关资源
最近更新 更多