在字符串中匹配字符"/"

4

这是我的第一篇文章,我是Python的新手。我正在尝试让它工作。

string 1 = [1/0/1, 1/0/2]
string 2 = [1/1, 1/2]

尝试检查字符串是否包含两个/,如果是,则只需将0替换为1,使其变为1/1/11/1/2
如果没有两个/,则需要添加一个以及1,并将其更改为格式1/1/11/1/2,因此字符串2变为[1/1/1,1/1/2]
最终目标是使所有字符串都匹配模式x/1/x。感谢您对此的所有输入。我尝试了这个方法,它似乎有效。
for a in Port:
   if re.search(r'././', a):
     z.append(a.replace('/0/','/1/') )
   else:
     t1= a.split('/')
     if len(t1)>1 :
      t2= t1[0] + "/1/" + t1[1]
      z.append(t2)

有几行代码处理了一些异常,但似乎已经完成了工作。

3个回答

3

可以使用内置的字符串函数来解决这个问题,而无需添加由使用 RegEx 引擎引起的全部开销和额外的计算时间。

例如:

# The string to test:
sTest = '1/0/2'

# Test the string:
if(sTest.count('/') == 2):
    # There are two forward slashes in the string
    # If the middle number is a 0, we'll replace it with a one:
    sTest = sTest.replace('/0/', '/1/')
elif(sTest.count('/') == 1):
    # One forward slash in string
    # Insert a 1 between first portion and the last portion:
    sTest = sTest.replace('/', '/1/')
else:
    print('Error: Test string is of an unknown format.')
# End If

如果你真的想使用 RegEx,那么你可以简单地将字符串与这两个模式进行匹配:\d+/0/\d+\d+/\d+(?!/)。如果第一个模式匹配失败,则尝试匹配第二个模式。然后,您可以使用任一分组、拆分或仅调用.replace()(就像我上面所做的那样)来格式化所需的字符串。
编辑:为了澄清,我将解释两个模式:
模式1:\d+/0/\d+ 本质上可以读作“匹配任何数字(由一个或多个数字组成),后跟一个正斜杠、一个零(0)、另一个正斜杠,然后是任何数字(由一个或多个数字组成)”。
模式2:\d+/\d+(?!/) 可以看作是“匹配任何数字(由一个或多个数字组成),后跟一个正斜杠和任何其他数字(由一个或多个数字组成),后面跟着另一个正斜杠。” 此模式中的最后一部分可能有点令人困惑,因为它使用了RegEx引擎的负向先行断言功能。
如果您想要添加更严格的规则以确保没有前导或尾随的非数字字符,则可以在模式的开头添加^,在结尾处添加$,以分别表示字符串的开头和结尾。这也将允许您从第二个模式中删除先行断言表达式((?!/))。因此,您最终会得到以下模式:^\d+/0/\d+$^\d+/\d+$

3
识别 / 的正则表达式模式只是 \/

2
在Python中不需要转义正斜杠。正斜杠字符在RegEx标准中不是特殊字符,也不被认为是Python实现的RegEx中的特殊字符。然而,在某些语言中(例如JavaScript和某些情况下的PHP),转义正斜杠是必要的。尽管如此,在Python中,它什么都不是,转义只会搞乱模式。 - Spencer D

0

https://regex101.com/r/rE6oN2/1 在左侧点击代码生成器。您将获得:

import re
p = re.compile(ur'\d/1/\d')
test_str = u"1/1/2"

re.search(p, test_str)

感谢大家分享这个。我刚试了一下以下的代码,看起来可以解决问题。可能不是最优的方法。for a in Port: if re.search(r'././', a): z.append(a.replace('/0/','/1/') ) else: t1= a.split('/') if len(t1)>1 : t2= t1[0] + "/1/" + t1[1] z.append(t2) - 007Viper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接