Python 正则表达式 : include an entire field

标签 python regex

我有一个很长的字符串S,包含几个格式如下的子字符串:

[&FULL="583 - node#597 <...a lot more characters inside...> ,REALNAME="node#638"]

即:

  • [&FULL="<a number with 1 to 3 digits> 开头
  • REALNAME="node#<a number with 1 to 3 digits>"] 结尾
  • 中间有很多字符,包括一些特殊字符和空格。

我的目标是:

  • 获取一个可以抓取所有这样的子字符串的正则表达式
  • 仅提取 [&FULL= 之后的数字。让我们调用这些号码x[i] ,对于子字符串i
  • 将子字符串 i 替换为 x[i]

正如您所想,第 2 步和第 3 步很简单。我的部分解决方案是:

r'\[&FULL=[\s\S]*?(?=REALNAME="node#\d{1,3}"\])'
  • \[&FULL=匹配子字符串的起始部分
  • [\s\S]*匹配子字符串中间的任何内容
  • ?(?=REALNAME="node#\d{1,3}"\])会匹配子串的尾部,但这就是问题所在。

后面的部分使用(?=...) 返回 REALNAME="node#638"]结果是,因为,这不是它的行为方式。但我想保留字符串的尾端,以便我可以使用 replace()功能。

编辑:当前解决方案

# Matches *almost* everything, except for the bit at the back
# places the matches in a list
pattern1 = r'\[&FULL=[\s\S]*?(?=REALNAME="node#\d{1,3}"\])'
pattern1_ls = re.findall(pattern1, my_long_string)

# Pattern to match just the back: 'REALNAME=...'
pattern2 = r'REALNAME="node#\d{1,3}"\]'
realnames_ls = re.findall(pattern2, my_long_string)

# regex to extract NUMBER from each pattern1 result
pattern = r'\[&FULL="\d{1,3}'
for i in range(len(pattern1_ls)):
    # there should be only 1 result
    result=re.findall(pattern, pattern1_ls[i])[0]
    # ditch the first 8 characters, '[&FULL="'
    node_num = result[8:]
    original_pattern = pattern1_ls[i] 
    pattern1_ls[i] = [original_pattern, node_num]

# Replace pattern1 with [&branch_num=NUMBER]
for nd in pattern1_ls:
    my_long_string = my_long_string.replace(nd[0], nd[1])

# Replace pattern2 with empty string (i.e. delete it)
for nm in realnames_ls:
    my_long_string = my_long_string.replace(nm, "")

最佳答案

如果您只使用组,如下所示:

\[&FULL=[\s\S]*?(?P<string>REALNAME="node#\d{1,3}"\])

以下是示例的链接:https://regex101.com/r/SFiS1G/1

关于Python 正则表达式 : include an entire field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806983/

相关文章:

python - 维吉内尔密码输出包括原始消息

javascript - JavaScript 上的电子邮件验证功能错误

php - 使用正则表达式匹配 ?但不是\?

python - 如何将大部分原始文件系统复制到文件中?

python - numpy 数组或 pandas DataFrame 中的条件过滤

python - 删除 Pandas 数据框列中的多个子字符串

javascript - 如何使用正则表达式匹配重复子字符串?

javascript - Javascript 的正则表达式允许除“和%”之外的所有内容

python - Ansible python API 2.0 : run a playbook in a python script for windows clients

python - 仅替换字符串的结尾