我是编程新手,抱歉,如果这看起来微不足道:我有一个文本,我试图分裂成使用正则表达式的单个句子。使用.split
方法,我搜索一个点,后跟一个大写字母
"\. A-Z"
但是,我需要通过以下方式完善这个规则:点不可以由Abs
或S
来处理。如果它后面跟一个大写字母(A-Z
),如果它是一个月名,比如January | February | March
,它应该仍然不匹配。
我试着实现上半场,但即使这样也没用。我的代码是:
"( (?<!Abs)\. A-Z) | (?<!S)\. A-Z) ) "
Tags:
使用nltk或@root建议的类似工具。
要回答您的regex问题:
输入
Output
我在标题中添加了这个问题的简短答案,因为这是谷歌搜索结果的顶部:
有多个不同长度的负面表情的方法是这样将它们连在一起:
"(?<!1)(?<!12)(?<!123)example"
首先,我认为您可能需要用
\s+
替换空间,或者\s
替换它,如果它确实是一个空间(在英文文本中经常会发现双空格)。其次,要匹配一个大写字母,您必须使用
[A-Z]
,但是A-Z
不起作用(但请记住,除了A-Z
…,可能还有其他大写字母)。另外,我想我知道为什么这不起作用。如果正则表达式引擎前面没有
Abs
或S
,则它将尝试匹配\. [A-Z]
。问题是,如果它由一个S
前置,那么它是而不是由Abs
前置,所以第一个模式匹配。如果它是由Abs
前置的,那么它是由S
前置的而不是前置的,所以第二个模式版本匹配。无论哪种方式,其中一种模式都将匹配,因为Abs
和S
是互斥的。你问题的第一部分可能是
或者
(根据我的建议)
那是因为你必须避免
|
,没有它,现在的表达式是不受Abs的影响,而不受S的影响。如果两者都是真的,模式匹配器将继续扫描字符串并找到匹配项。要排除我想出的月份名称,请执行以下正则表达式:
同样的论点也适用于消极的前瞻模式。
相关问题 更多 >
编程相关推荐