【问题标题】:Alternative to Non-fixed width Regex look behind; Python替代非固定宽度正则表达式看后面; Python
【发布时间】:2017-08-17 13:43:38
【问题描述】:

我已经查看了之前发布的这个问题的许多变体,但我仍然需要帮助来制定解决方案。感谢您的帮助。

非固定宽度正则表达式的替代方案似乎是创建一个捕获组。 有人可以帮助解决以下问题的语法吗?

假设有不同的句子,其中包含“帐户”、“贷方”和“借方”三个词。我想匹配那些谈论帐户被借记的人。 所以我想消除匹配一个谈论它被记入的字符串。 当“帐户”前面没有“贷方”但后面/前面有“借方”时,如何匹配?

这是我在匹配“account”时排除字符串“credit”的尝试。

(?<!(\bcredit))(.account)

“贷记您的帐户” - 未能消除“贷记”

“考虑及时记入您的帐户” - 未能消除“信用”

“信用帐户”- 消除了“信用”,但这要归功于正则表达式中的“.”。

我想将 . 变成 .{0,20} 但这不会使行为符合预期。

感谢任何帮助或反馈

【问题讨论】:

  • 抱歉,您是提取还是替换?我猜你打算在re.sub 中使用它,对吧?检查this approach
  • 谢谢你的解决方案,请让我剖析一下,想一想。我所做的只是用这个来计算出现次数: len(re.findall(regex_expression,string_to_lookin))
  • 好的,我知道你已经找到了解决方案。

标签: python regex


【解决方案1】:

您可以通过选择使用简单正则表达式匹配单词组合的字符串来工作:

import re

s1 = "credit your account"
s2 = "considering crediting your account promptly"
s3 = "credit account"
s4 = "we are debiting your account"

pattern = '.*(credit.*account|account.*credit).*'

print(re.match(pattern, s1))
print(re.match(pattern, s2))
print(re.match(pattern, s3))
print(re.match(pattern, s4))

输出是:

<_sre.SRE_Match object; span=(0, 19), match='credit your account'>
<_sre.SRE_Match object; span=(0, 43), match='considering crediting your account promptly'>
<_sre.SRE_Match object; span=(0, 14), match='credit account'>
None

如果您使用re.search(),则只能使用正则表达式的括号部分。

在获得感兴趣的字符串(不匹配的字符串)之后,您可以应用另一个正则表达式从中检索部分。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2021-02-21
    • 2018-05-29
    • 2017-04-10
    相关资源
    最近更新 更多