我有以下代码行,我不太确定其输出结果。我发现sys.path
的第一个索引为空字符串。我认为这意味着将path1/path2
添加到sys.path
,但是不确定为什么需要' '
吗?我正在使用python 2.7。谢谢!
extracting_paths = re.findall('.*path1/path2/.*', ' '.join(sys.path))
答案 0 :(得分:0)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim n As Integer
Dim present As New List(Of Integer)
For Each strValue As String In TextBox1.Text.Split(",".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
If Integer.TryParse(strValue, n) Then
present.Add(n)
End If
Next
present.Sort() ' optional; if you need these sorted for something else
Dim notPresent As New List(Of Integer)
For i As Integer = 1 To 80
If present.IndexOf(i) = -1 Then
notPresent.Add(i)
End If
Next
TextBox2.Text = String.Join(",", notPresent.ToArray)
End Sub
查找re.findall(pattern, string)
中所有pattern
的出现。
在这种情况下,该字符串是通过使用.join()
构建的,并导致一个大字符串,其中string
中的所有列表条目均以空格开头。
您需要此空间,因为否则sys.path
中的所有路径都将合并为一个大路径字符串...
答案 1 :(得分:0)
' '.join(sys.path)
部分将路径连接到一个由' '
分隔的字符串中,然后.*
的正则表达式中的findall()
部分也与此空白分隔符匹配。
因此您可以改为:
extracting_paths = re.findall('[^\s]+path1/path2/[^\s]+', ' '.join(sys.path))
如果您的路径也有空格(这更好):
extracting_paths = re.findall('[^:]+path1/path2/[^:]+', ':'.join(sys.path))
答案 2 :(得分:0)
extracting_paths = re.findall('.*path1/path2/.*', ' '.join(sys.path))
实际上应该而不是串联路径名,然后匹配应该分别匹配每个路径名:
pat = re.compile('.*path1/path2/.*')
extracting_paths = filter(pat.match, sys.path)
如果您想要字符串,并且每个字符串中都有匹配项的匹配项的位置都可以使用
extracting_paths = filter(lambda t: t[1], zip(sys.path, map(pat.findall, sys.path)))
这两种方法都更安全,因为它们没有带内定界符。