正则表达式中的空字符串有什么作用?

时间:2018-12-29 21:12:14

标签: python python-2.7

我有以下代码行,我不太确定其输出结果。我发现sys.path的第一个索引为空字符串。我认为这意味着将path1/path2添加到sys.path,但是不确定为什么需要' '吗?我正在使用python 2.7。谢谢!

extracting_paths = re.findall('.*path1/path2/.*', ' '.join(sys.path))

3 个答案:

答案 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)))

这两种方法都更安全,因为它们没有带内定界符。