这是我的第一篇文章,我是Python的新手。我想让它发挥作用。
string 1 = [1/0/1, 1/0/2]
string 2 = [1/1, 1/2]
如果我看到两个/
,请尝试检查字符串,然后我只需要将0
替换为1
,使其变为1/1/1
和1/1/2
。
如果我没有两个/
,那么我需要添加一个1
并将其更改为1/1/1
和1/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)
有几行可以处理一些例外,但似乎可以完成这项任务。
答案 0 :(得分:3)
用于标识/
的正则表达式模式只是\/
答案 1 :(得分: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+
基本上可以读作“匹配任意数字(由一(1)个或更多个数字组成)后跟正斜杠,零(0),另一个正斜杠,然后是任何数字(由一(1)个或更多数字组成)。
模式2:\d+/\d+(?!/)
可以读作“匹配任意数字(由一(1)个或更多数字组成)后跟正斜杠和任何其他数字(由一(1)个或更多数字组成)然后是 NOT ,然后是另一个正斜杠。“这种模式的最后一部分可能有点令人困惑,因为它使用了RegEx引擎的负前瞻能力。
如果您想为这些模式添加更严格的规则以确保没有任何前导或尾随非数字字符,您可以将^
添加到模式的开头,将$
添加到结束,分别表示字符串的开头和字符串的结尾。这也允许您从第二个模式((?!/)
)中删除先行表达式。因此,您最终会得到以下模式:^\d+/0/\d+$
和^\d+/\d+$
。
答案 2 :(得分: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)