Python正则表达式获取引号之间的字符串

Posted

技术标签:

【中文标题】Python正则表达式获取引号之间的字符串【英文标题】:Python regex get string between quotes 【发布时间】:2015-09-29 10:30:22 【问题描述】:

我正在尝试编写一个用于本地化源代码文件的小型 python 脚本。

在源文件中有一些这样的字符串:

title: "Warning".localized()

每当我发现附加了.localized() 时,我要做的是提取引号之间的字符串。

匹配这个字符串的正则表达式是:regex = re.compile('([^"]*).localized\(\)', re.DOTALL)

匹配有效,因为我得到以下输出:

...
./testproject/test1.swift
.localized()
.localized()
./testproject/test2.swift
...

但我没有得到引号之间的字符串。

python 脚本:

import os, re, subprocess
import fnmatch

def fetch_files_recursive(directory, extension):
matches = []
for root, dirnames, filenames in os.walk(directory):
  for filename in fnmatch.filter(filenames, '*' + extension):
      matches.append(os.path.join(root, filename))
return matches

regex = re.compile('([^"]*).localized\(\)', re.DOTALL)

for file in fetch_files_recursive('.', '.swift'):
print file
with open(file, 'r') as f:
    content = f.read()
    # e.g. "Warning".localized(),
    for result in regex.finditer(content):
        print result.group(0) // output = '.localized()'
        print result.group(1) // output = '' empty :-(

【问题讨论】:

正则表达式应该更像/"([^"]+)"\.localized\(\)/。您不允许在Warning.localized 之间使用"。由于您使用星号组 1 将是空的。 尝试:regex = re.compile(r'"([^"]*)"\.localized\(\)') 并使用捕获的组 #1 另外,为了将来参考,这个站点非常适合测试 Python 正则表达式:pythex.org @anubhava 谢谢,它工作。将其发布为答案,我会接受。 @Chris 你还没有接受答案。 【参考方案1】:

将我的评论转化为答案。

你可以使用这个模式:

regex = re.compile(r'"([^"]*)"\.localized\(\)')

并使用捕获的组 #1。 [^"]* 匹配 0 个或多个不是双引号的任何字符。

或使用周围:

regex = re.compile(r'(?<=")([^"]*)"(?="\.localized\(\)'))

【讨论】:

以上是关于Python正则表达式获取引号之间的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如果此类字符串在Javascript中包含逗号,则正则表达式获取引号之间的文字字符串的内容

正则表达式拆分字符串,不包括可转义引号之间的分隔符

在正则表达式中转义(\')单引号,它在两个单引号之间采用字符串。

无法使用正则表达式在双引号之间提取字符串

R正则表达式:隔离引号之间的字符串

正则表达式 - 获取引号中的字符串忽略转义的引号和评论