我是RegEx的初学者,正在尝试识别短信中不同语句的结尾。请参阅下面的屏幕截图。
我怎样才能避免选择下一个字母,然后用句号表示语句的结束。
请注意,有些语句具有<.><Alphabets>
,而有些语句则具有<.><space><Alphabets>
使用的Regex:r". ?[D]"
示例短信:-我只想选择句号和空格(如果有的话(。
Txn of USD 00.00 done using TC XX at POS*MERCH on 30-Feb-22. Avl bal:USD 00.00. Call xxxxxx for dispute or SMS BLOCK xxxx to xxxxxxx
Acct XX debited with USD XX.00 on some date.Info: ABC*BDECS-XYZ.Avbl Bal:USD yy,xxx.95.Call xxxxxx for dispute or SMS BLOCK xx to xxxxx
RegExr在常规模式上的屏幕截图
您想要的是一个前瞻组。无论你是正面展望并使用否定的字符集D
,还是负面展望字符集d
,都无关紧要——我将在下面概述这两个:
regex = r". ?(?=D)" # asserts that the following character matches D
regex = r". ?(?!d)" # asserts the following character does NOT match d
还有后面的变体(?<!pattern)
和(?<=pattern)
,它们断言模式在当前位置之前不匹配。
这些组中没有一个捕捉到匹配的文本——它们只是";向前看";或";向后看";而不改变状态。
使用. ?[D]
是匹配单个非数字字符,但该非数字字符本身也可以是空格或换行符。
如果只想匹配一个点,但不想在它是字符串中的最后一个字符时匹配,则可以断言不带换行符的可选空格。
然后匹配不是数字的非空白字符。
.(?=[^Sn]*[^sd])
模式匹配:
.
匹配一个点(?=
正向前瞻断言当前位置右侧的内容为[^Sn]*
匹配不带换行符的可选空白字符[^sd]
匹配除数字以外的单个非空白字符
)
关闭前瞻
查看regex演示。