所以我有一个像这样的消息有效载荷,
**GS***RL*CITGO*JJ*20090518*1036*25110*X*00405\n
ST*423*2511*RT**GS***08247
我还有另外一个这样的消息有效载荷,
**#**UPT 0000SWSAM001203081454NS /\n
GS*QM*TRSC*UPDS *20120309*0820*0309***#***004010
现在在上面的两个示例中,我想要一个正则表达式,它只会找到GS
或#
的一次出现(即使搜索字符串也在有效负载内)
我知道我可以使用^
来识别字符串的开头,但它似乎不适用于我的两个用例
答案 0 :(得分:0)
使用前瞻声明您的搜索字词之前 \n
字符:
((GS)|#)(?=.*\n)
答案 1 :(得分:0)
以下内容将与GS
或#
匹配。我已经逃过了#
,因为我不确定您使用哪种语言或应用来满足您的要求。每个程序和编程语言都有一个略有不同的REGEX实现,带有不同的标志和新行匹配。
PHP的(PCRE)风格:
/(GS|\#)/
典型正则表达式OR
声明
(GS|\#)
答案 2 :(得分:0)
如果您的语言通过字符串支持非锚定搜索(它可能确实如此 - 例如sed
和grep
的操作方式),只需使用与Python相同的内容即可代码是:
import re
payload = '''**GS***RL*CITGO*JJ*20090518*1036*25110*X*00405
ST*423*2511*RT**GS***08247'''
needle = r'GS|#'
match = re.search(needle, payload) # search() is unanchored
# index of the first matched character
print match.start() #> 2
# index of the first character after the match
print match.end() #> 4
# prints the substring the RE matched
print payload[match.start(), match.end()] #> GS
ideone示例:http://ideone.com/USvlTk