如何使用Regex从字符串中获取文件名

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我在这里有这个字符串:

"['\r\n                    File: FLO_JIUWASOKLDM_05_HetR_IUSJA_&_Cracks.mp4', <br/>, '\r\n                    Size: 48.14 MB                ']"

我有这个正则表达式 \w+\.\w+

我希望正则表达式获取文件名 FLO_JIUWASOKLDM_05_HetR_IUSJA_&_Cracks.mp4

但它在&符号处打破,它返回_Cracks.mp4我需要做什么来修复它?我是Regex的新手。

提问于
用户回答回答于

\w是“单词字符”的简写,意思是字母,数字和下划线。注意缺少&符号。要包含&符号,您可以使用字符类[\w&]。那么你的正则表达式就是

[\w&]+\.\w+
  • 顺便说一句,这可能会匹配,48.14具体取决于您使用的正则表达式功能。

但也许你想要包含更多的字符而不仅仅是&符号。所有非空白字符怎么样?

\S+\.\w+
  • 这使用\S,这是空白速记的反转\s
用户回答回答于

这里有很多选择,例如,一个是:

([^\s]+\.[a-z][a-z0-9]+)

演示

测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"([^\s]+\.[a-z][a-z0-9]+)"

test_str = "\"['\\r\\n                    File: FLO_JIUWASOKLDM_05_HetR_IUSJA_&_Cracks.mp4', <br/>, '\\r\\n                    Size: 48.14 MB                ']\"
"

matches = re.finditer(regex, test_str, re.MULTILINE | re.IGNORECASE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

扫码关注云+社区

领取腾讯云代金券