Python正则表达式-提取包含星号的句子 test\u string:'**金额**:$25k**姓名**:詹姆斯**超额**:未退回\n**西装?**Y**地点**:旧金山**保险**:不适用\n**FTSA**:未列出' 进口稀土 regex=r“(?:^ |[^.?*,!-]*(?

Python正则表达式-提取包含星号的句子 test\u string:'**金额**:$25k**姓名**:詹姆斯**超额**:未退回\n**西装?**Y**地点**:旧金山**保险**:不适用\n**FTSA**:未列出' 进口稀土 regex=r“(?:^ |[^.?*,!-]*(?,regex,regex-negation,Regex,Regex Negation,我会将内容视为(半结构化)键值文件格式 可以将键值对与正则表达式匹配,如下所示: test_string: '**Amount** : $25k **Name** : James **Excess** : None Returned \n **In Suit?** Y **Venue** : SF **Insurance** : N/A \n **FTSA** : None listed' import re regex = r"(?:^|[^.?*,!-]*(?<=[.?\s*,!

我会将内容视为(半结构化)键值文件格式

可以将键值对与正则表达式匹配,如下所示:

test_string: '**Amount** : $25k  **Name** : James **Excess** : None Returned \n **In Suit?**  Y **Venue** : SF **Insurance** : N/A \n **FTSA** : None listed'

import re
regex = r"(?:^|[^.?*,!-]*(?<=[.?\s*,!-]))(n/a)(?=[\s.?*!,-])[^.?*,!-]*[.?*,!-]"

subst = ""

result = re.sub(regex, subst, test_str, 0, re.IGNORECASE | re.MULTILINE)

说明:

  • (\*\*[a-zA-Y?]+\*\*)
    键:您可能需要调整字符范围
  • 被空间包围的kv分离器
  • ((?:(?!\*))*)
    值是用一个贪婪的标记捕获的:除了文本之外的所有内容
    ***
    ,后面紧跟着
    (?=|$)
    字符串的结尾
    $
    或一个分隔空间。 (?=|$)
:


提取
**Insurance**:N/A
的正则表达式是
\*\*\*\*\*:N/A
。您真正想提取的是什么?另一个更通用的正则表达式可以匹配任何可能更接近您意图的
**word**:N/A
。请小心转义
*
//code>等字符,因为它们有sp正则表达式中的特殊含义。尽管看起来你的正则表达式应该提取比这更具体的内容,你能扩展你的输入和所需的输出吗?
**in Suit?**Y
看起来有点不对劲。你错过了一个冒号吗?in Suit?Y是有意要在新行中
(\*\*[a-zA-Y ?]+\*\*) : ((?:(?!\*\*).)*)(?= |$)
import re
regex = r"(\*\*[a-zA-Z ?]+\*\*) : ((?:(?!\*\*).)*)(?= |$)"
test_str = "**Amount** : $25k  **Name** : James **Excess** : None Returned \\n **In Suit?** : Y **Venue** : SF **Insurance** : N/A \\n **FTSA** : None listed"
matches = re.finditer(regex, test_str, re.MULTILINE)
for match in matches:
    if match.group(1) == "**Insurance**":
        print (match.group(2))